diff options
author | Bastien <bzg@gnu.org> | 2017-12-29 18:36:27 +0100 |
---|---|---|
committer | Bastien <bzg@gnu.org> | 2017-12-29 18:36:27 +0100 |
commit | 29dd9a66053d0cccd805bab5c925a03be72f2d13 (patch) | |
tree | fb5a2a952c83b89c9d053d7ababc2650bde49019 | |
parent | 8983ac917b1ca1b46697a5d27655e4ef71fa6537 (diff) | |
download | org-mode-29dd9a66053d0cccd805bab5c925a03be72f2d13.tar.gz |
org.el: New value for `org-todo-repeat-to-state'
* lisp/org.el (org-todo-repeat-to-state): Allow `t' to use
the previous TODO state.
* doc/org.texi (Repeated tasks): Document the new optional
value of `org-todo-repeat-to-state'.
-rw-r--r-- | doc/org.texi | 18 | ||||
-rw-r--r-- | lisp/org.el | 18 |
2 files changed, 21 insertions, 15 deletions
diff --git a/doc/org.texi b/doc/org.texi index 6fc8579..6aab1ba 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -6408,16 +6408,16 @@ Deadlines and scheduled items produce entries in the agenda when they are over-due, so it is important to be able to mark such an entry as completed once you have done so. When you mark a DEADLINE or a SCHEDULE with the TODO keyword DONE, it will no longer produce entries in the agenda. The problem -with this is, however, that then also the @emph{next} instance of the +with this is, however, is that then also the @emph{next} instance of the repeated entry will not be active. Org mode deals with this in the following -way: When you try to mark such an entry DONE (using @kbd{C-c C-t}), it will -shift the base date of the repeating timestamp by the repeater interval, and -immediately set the entry state back to TODO@footnote{In fact, the target -state is taken from, in this sequence, the @code{REPEAT_TO_STATE} property or -the variable @code{org-todo-repeat-to-state}. If neither of these is -specified, the target state defaults to the first state of the TODO state -sequence.}. In the example above, setting the state to DONE would actually -switch the date like this: +way: When you try to mark such an entry as DONE (using @kbd{C-c C-t}), it +will shift the base date of the repeating timestamp by the repeater interval, +and immediately set the entry state back to TODO@footnote{In fact, the target +state is taken from, in this sequence, the @code{REPEAT_TO_STATE} property, +the variable @code{org-todo-repeat-to-state} if it is a string, the previous +TODO state if @code{org-todo-repeat-to-state} is @code{t} or the first state +of the TODO state sequence.}. In the example above, setting the state to +DONE would actually switch the date like this: @example ** TODO Pay the rent diff --git a/lisp/org.el b/lisp/org.el index 44c42b2..9975cd9 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -3026,13 +3026,17 @@ This option can also be set with on a per-file-basis with (defcustom org-todo-repeat-to-state nil "The TODO state to which a repeater should return the repeating task. -By default this is the first task in a TODO sequence, or the previous state -in a TODO_TYP set. But you can specify another task here. -alternatively, set the :REPEAT_TO_STATE: property of the entry." +By default this is the first task of a TODO sequence or the +previous state of a TYPE_TODO set. But you can specify to use +the previous state in a TODO sequence or a string. + +Alternatively, you can set the :REPEAT_TO_STATE: property of the +entry, which has precedence over this option." :group 'org-todo :version "24.1" - :type '(choice (const :tag "Head of sequence" nil) - (string :tag "Specific state"))) + :type '(choice (const :tag "Use the previous TODO state" t) + (const :tag "Use the head of the TODO sequence" nil) + (string :tag "Use a specific TODO state"))) (defcustom org-log-repeat 'time "Non-nil means record moving through the DONE state when triggering repeat. @@ -12782,7 +12786,9 @@ This function is run automatically after each state change to a DONE state." (when (and repeat (not (zerop (string-to-number (substring repeat 1))))) (when (eq org-log-repeat t) (setq org-log-repeat 'state)) (let ((to-state (or (org-entry-get nil "REPEAT_TO_STATE" 'selective) - org-todo-repeat-to-state))) + (and (stringp org-todo-repeat-to-state) + org-todo-repeat-to-state) + (and org-todo-repeat-to-state org-last-state)))) (org-todo (cond ((and to-state (member to-state org-todo-keywords-1)) to-state) |