Nicolas Goaziou 8 лет назад
Родитель
Сommit
f157283c12
1 измененных файлов с 18 добавлено и 10 удалено
  1. 18 10
      lisp/org-agenda.el

+ 18 - 10
lisp/org-agenda.el

@@ -5889,21 +5889,25 @@ specification like [h]h:mm."
 	       (pos (1- (match-beginning 1)))
 	       (todo-state (save-match-data (org-get-todo-state)))
 	       (done? (member todo-state org-done-keywords))
+               (sexp? (string-prefix-p "%%" s))
 	       ;; DEADLINE is the deadline date for the entry.  It is
 	       ;; either the base date or the last repeat, according
 	       ;; to `org-agenda-prefer-last-repeat'.
 	       (deadline
-		(if (or (eq org-agenda-prefer-last-repeat t)
-			(member todo-state org-agenda-prefer-last-repeat))
-		    (org-agenda--timestamp-to-absolute
-		     s today 'past (current-buffer) pos)
-		  (org-agenda--timestamp-to-absolute s)))
+		(cond
+		 (sexp? (org-agenda--timestamp-to-absolute s current))
+		 ((or (eq org-agenda-prefer-last-repeat t)
+		      (member todo-state org-agenda-prefer-last-repeat))
+		  (org-agenda--timestamp-to-absolute
+		   s today 'past (current-buffer) pos))
+		 (t (org-agenda--timestamp-to-absolute s))))
 	       ;; REPEAT is the future repeat closest from CURRENT,
 	       ;; according to `org-agenda-show-future-repeats'. If
 	       ;; the latter is nil, or if the time stamp has no
 	       ;; repeat part, default to DEADLINE.
 	       (repeat
 		(cond
+		 (sexp? deadline)
 		 ((<= current today) deadline)
 		 ((not org-agenda-show-future-repeats) deadline)
 		 (t
@@ -6052,21 +6056,25 @@ scheduled items with an hour specification like [h]h:mm."
 	       (pos (1- (match-beginning 1)))
 	       (todo-state (save-match-data (org-get-todo-state)))
 	       (donep (member todo-state org-done-keywords))
+	       (sexp? (string-prefix-p "%%" s))
 	       ;; SCHEDULE is the scheduled date for the entry.  It is
 	       ;; either the bare date or the last repeat, according
 	       ;; to `org-agenda-prefer-last-repeat'.
 	       (schedule
-		(if (or (eq org-agenda-prefer-last-repeat t)
-			(member todo-state org-agenda-prefer-last-repeat))
-		    (org-agenda--timestamp-to-absolute
-		     s today 'past (current-buffer) pos)
-		  (org-agenda--timestamp-to-absolute s)))
+		(cond
+		 (sexp? (org-agenda--timestamp-to-absolute s current))
+		 ((or (eq org-agenda-prefer-last-repeat t)
+		      (member todo-state org-agenda-prefer-last-repeat))
+		  (org-agenda--timestamp-to-absolute
+		   s today 'past (current-buffer) pos))
+		 (t (org-agenda--timestamp-to-absolute s))))
 	       ;; REPEAT is the future repeat closest from CURRENT,
 	       ;; according to `org-agenda-show-future-repeats'. If
 	       ;; the latter is nil, or if the time stamp has no
 	       ;; repeat part, default to SCHEDULE.
 	       (repeat
 		(cond
+		 (sexp? schedule)
 		 ((<= current today) schedule)
 		 ((not org-agenda-show-future-repeats) schedule)
 		 (t