emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Fix org-agenda-skip-scheduled-if-deadline-is-shown bug


From: Morgan Smith
Subject: [PATCH] Fix org-agenda-skip-scheduled-if-deadline-is-shown bug
Date: Sat, 30 Dec 2023 15:45:47 -0500

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]