Browse Source

Make today's deadlines "close" without lead time

* lisp/org.el (org-deadline-close): A timestamp is close if the days
  between now and the timestamp are less then or equal to the days of
  lead time.

* testing/lisp/test-org.el: Add tests for org-deadline-close.
Don March 8 years ago
parent
commit
bd49486db9
2 changed files with 29 additions and 1 deletions
  1. 1 1
      lisp/org.el
  2. 28 0
      testing/lisp/test-org.el

+ 1 - 1
lisp/org.el

@@ -17462,7 +17462,7 @@ If SECONDS is non-nil, return the difference in seconds."
 (defun org-deadline-close (timestamp-string &optional ndays)
   "Is the time in TIMESTAMP-STRING close to the current date?"
   (setq ndays (or ndays (org-get-wdays timestamp-string)))
-  (and (< (org-time-stamp-to-now timestamp-string) ndays)
+  (and (<= (org-time-stamp-to-now timestamp-string) ndays)
        (not (org-entry-is-done-p))))
 
 (defun org-get-wdays (ts &optional delay zero-delay)

+ 28 - 0
testing/lisp/test-org.el

@@ -286,6 +286,34 @@
   (should (equal (org-parse-time-string "<2012-03-29>" t)
 		 '(0 nil nil 29 3 2012 nil nil nil))))
 
+(ert-deftest test-org/deadline-close ()
+  "Test `org-deadline-close' specifications."
+  ;; Pretend that the current time is 2016-06-03 Fri 01:43
+  (flet ((current-time () '(22353 6425 905205 644000)))
+    ;; Timestamps are close if they are within `ndays' of lead time.
+    (org-test-with-temp-text "* Heading"
+      (should (org-deadline-close "2016-06-03 Fri" 0))p
+      (should (org-deadline-close "2016-06-02 Thu" 0))
+      (should-not (org-deadline-close "2016-06-04 Sat" 0))
+      (should (org-deadline-close "2016-06-04 Sat" 1))
+      (should (org-deadline-close "2016-06-03 Fri 12:00" 0)))
+    ;; Read `ndays' from timestamp if argument not given.
+    (org-test-with-temp-text "* H"
+      (should (org-deadline-close "2016-06-04 Sat -1d"))
+      (should-not (org-deadline-close "2016-06-04 Sat -0d"))
+      (should (org-deadline-close "2016-06-10 Fri -1w"))
+      (should-not (org-deadline-close "2016-06-11 Sat -1w")))
+    ;; Prefer `ndays' argument over lead time in timestamp.
+    (org-test-with-temp-text "* H"
+      (should (org-deadline-close "2016-06-04 Sat -0d" 1))
+      (should-not (org-deadline-close "2016-06-04 Sat -0d" 0)))
+    ;; Completed tasks are never close.
+    (let ((org-todo-keywords '(("TODO" "|" "DONE"))))
+      (org-test-with-temp-text "* TODO Heading"
+	(should (org-deadline-close "2016-06-03")))
+      (org-test-with-temp-text "* DONE Heading"
+	(should-not (org-deadline-close "2016-06-03"))))))
+
 
 ;;; Drawers