branch: externals/org commit 23f751910eb477eaf876837f54800429b2b51781 Author: Valentin Herrmann <m...@valentin-herrmann.de> Commit: Ihor Radchenko <yanta...@posteo.net>
org.el: Respect org-extend-today-until in timestamps with ++ * org.el (org-auto-repeat-maybe): Changed org-auto-repeat-maybe, so that switching a repeating todo with a timestamp of the form <… ++…> respects `org-extend-today-until'. * test-org.el (test-org/auto-repeat-maybe, org-test-with-time-locale): Tests for interaction of `org-extend-today-until' and `org-auto-repeat-maybe'. Added `org-test-with-time-locale' to make test results independent of running machine. Explicitly avoid matching log note with old timestamp in all the tests to avoid confusion. Co-authored-by: Ihor Radchenko <yanta...@posteo.net> TINYCHANGE --- lisp/org.el | 5 +++- testing/lisp/test-org.el | 73 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 65 insertions(+), 13 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index d0b2355ea2..c99887723a 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -10113,7 +10113,10 @@ This function is run automatically after each state change to a DONE state." (let ((nshiftmax 10) (nshift 0)) (while (or (= nshift 0) - (not (time-less-p nil time))) + (if (equal what "h") + (not (time-less-p nil time)) + (>= (org-today) + (time-to-days time)))) (when (= nshiftmax (cl-incf nshift)) (or (y-or-n-p (format "%d repeater intervals were not \ diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index 8355e2d772..61c996825c 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -8412,26 +8412,75 @@ Paragraph<point>" (buffer-string)))) ;; Handle every repeater type using hours step. (should - (string-match-p - "2014-03-04 .* 02:00" - (org-test-at-time "<2014-03-04 02:35>" + (string-search + "<2014-03-04 02:00 +8h>" + (org-test-without-dow + (org-test-at-time "<2014-03-04 02:35>" (org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 +8h>" (org-todo "DONE") - (buffer-string))))) + (buffer-string)))))) (should - (string-match-p - "2014-03-04 .* 10:00" - (org-test-at-time "<2014-03-04 02:35>" + (string-search + "<2014-03-04 10:00 ++8h>" + (org-test-without-dow + (org-test-at-time "<2014-03-04 02:35>" (org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 ++8h>" (org-todo "DONE") - (buffer-string))))) + (buffer-string)))))) (should - (string-match-p - "2014-03-04 .* 10:35" - (org-test-at-time "<2014-03-04 02:35>" + (string-search + "<2014-03-04 10:35 .+8h>" + (org-test-without-dow + (org-test-at-time "<2014-03-04 02:35>" (org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 .+8h>" (org-todo "DONE") - (buffer-string))))) + (buffer-string)))))) + ;; Handle `org-extend-today-until'. + (should + (string-search + "<2014-03-04 ++1d>" + (let ((org-extend-today-until 4)) + (org-test-without-dow + (org-test-at-time "<2014-03-04 02:35>" + (org-test-with-temp-text "* TODO H\n<2014-03-03 ++1d>" + (org-todo "DONE") + (buffer-string))))))) + (should + (string-search + "<2014-03-06 17:00 ++1d>" + (let ((org-extend-today-until 4)) + (org-test-without-dow + (org-test-at-time "<2014-03-05 18:00>" + (org-test-with-temp-text "* TODO H\n<2014-03-04 17:00 ++1d>" + (org-todo "DONE") + (buffer-string))))))) + (should + (string-search + "<2014-03-04 10:00 ++8h>" + (let ((org-extend-today-until 4)) + (org-test-without-dow + (org-test-at-time "<2014-03-04 02:35>" + (org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 ++8h>" + (org-todo "DONE") + (buffer-string))))))) + (should + (string-search + "<2014-03-04 18:00 .+1d>" + (let ((org-extend-today-until 4)) + (org-test-without-dow + (org-test-at-time "<2014-03-04 02:35>" + (org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 .+1d>" + (org-todo "DONE") + (buffer-string))))))) + (should + (string-search + "<2014-03-04 10:35 .+8h>" + (let ((org-extend-today-until 4)) + (org-test-without-dow + (org-test-at-time "<2014-03-04 02:35>" + (org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 .+8h>" + (org-todo "DONE") + (buffer-string))))))) ;; Do not repeat inactive time stamps with a repeater. (should-not (string-match-p