lisp/org-agenda.el (org-agenda-get-scheduled): Consolidate deadline fetching code. Don't check if deadline is shown when 'org-agenda-skip-scheduled-if-deadline-is-shown' has a value of 'repeated-after-deadline'.
Currently when 'org-agenda-skip-scheduled-if-deadline-is-shown' has a value of 'repeated-after-deadline' then there is no effect. This is because when 'org-agenda-get-scheduled' is run on later dates, the previous deadlines are not put in 'deadline-pos'. --- lisp/org-agenda.el | 49 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index a1b2f3dc4..df1e8cb7d 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -6606,25 +6606,26 @@ scheduled items with an hour specification like [h]h:mm." (futureschedp (> schedule today)) (habitp (and (fboundp 'org-is-habit-p) (string= "habit" (org-element-property :STYLE el)))) + (deadline (and (or org-agenda-skip-scheduled-delay-if-deadline + org-agenda-skip-scheduled-if-deadline-is-shown) + (when-let ((timestamp (org-element-property :deadline el))) + (time-to-days + (org-timestamp-to-time + timestamp))))) (suppress-delay - (let ((deadline (and org-agenda-skip-scheduled-delay-if-deadline - (org-element-property - :raw-value - (org-element-property :deadline el))))) - (cond - ((not deadline) nil) - ;; The current item has a deadline date, so - ;; evaluate its delay time. - ((integerp org-agenda-skip-scheduled-delay-if-deadline) - ;; Use global delay time. - (- org-agenda-skip-scheduled-delay-if-deadline)) - ((eq org-agenda-skip-scheduled-delay-if-deadline - 'post-deadline) - ;; Set delay to no later than DEADLINE. - (min (- schedule - (org-agenda--timestamp-to-absolute deadline)) - org-scheduled-delay-days)) - (t 0)))) + (cond + ((not (and deadline org-agenda-skip-scheduled-delay-if-deadline)) nil) + ;; The current item has a deadline date, so + ;; evaluate its delay time. + ((integerp org-agenda-skip-scheduled-delay-if-deadline) + ;; Use global delay time. + (- org-agenda-skip-scheduled-delay-if-deadline)) + ((eq org-agenda-skip-scheduled-delay-if-deadline + 'post-deadline) + ;; Set delay to no later than DEADLINE. + (min (- schedule deadline) + org-scheduled-delay-days)) + (t 0))) (ddays (cond ;; Nullify delay when a repeater triggered already @@ -6661,16 +6662,14 @@ scheduled items with an hour specification like [h]h:mm." ;; doesn't apply to habits. (when (pcase org-agenda-skip-scheduled-if-deadline-is-shown ((guard - (or (not (memq (line-beginning-position 0) deadline-pos)) + (or (not deadline) habitp)) nil) (`repeated-after-deadline - (let ((deadline (time-to-days - (when (org-element-property :deadline el) - (org-time-string-to-time - (org-element-interpret-data - (org-element-property :deadline el))))))) - (and (<= schedule deadline) (> current deadline)))) + (and (<= schedule deadline) (> current deadline))) + ((guard + (not (memq (line-beginning-position 0) deadline-pos))) + nil) (`not-today pastschedp) (`t t) (_ nil)) -- 2.41.0