diff --git a/lisp/org.el b/lisp/org.el index d0b2355ea..c99887723 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 8355e2d77..61c996825 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -8412,26 +8412,75 @@ Paragraph" (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