Grant Schissler <grant.schiss...@gmail.com> writes: > Hi Org-mode Users, > > I am trying to change the behavior of marking a repeated task as DONE. I > would like the task to return to the current TODO state rather than the first > in > the TODO sequence or a fixed state. For example, > > ** APPT Lunch with Mallorie > <2014-12-04 Thu 12:00 +1w> > > should return to APPT, not TODO or some other predefined state as in the > current behavior: > > TODO Lunch with Mallorie > - State "DONE" from "APPT" [2014-11-21 Fri 10:56] > <2014-12-11 Thu 12:00 +1w> > > I am sure that customizing the org-todo-repeat-to-state will do the trick, > but > sadly, I have had the time to learn elisp well enough to perform this. > > Any help would be much appreciated. Please let me know if you have > questions. > > Thanks for the support and to all those that make org-mode great! > Grant
I haven't tried any of the following, and there may be better solutions, but... It looks like the variable you mention reads as (via C-h v org-todo-repeat-to-state RET and follow link to source), #+BEGIN_SRC emacs-lisp (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." :group 'org-todo :version "24.1" :type '(choice (const :tag "Head of sequence" nil) (string :tag "Specific state"))) #+END_SRC It looks like this variable will not allow to recall the previous TODO state. But you could make a separate TODO_TYP set. Depending on whether you define your TODO states in an init file or per-file base, you could try an extra line in your org file "header", #+BEGIN_SRC org ,#+TYP_TODO: APPT | DONE #+END_SRC or an extra block in your org-todo-keywords variable #+BEGIN_SRC emacs-lisp (setq org-todo-keywords '((type "APPT" "|" "DONE"))) #+END_SRC Another solution according to the above would be to use a property drawer, #+BEGIN_SRC org ,** APPT Lunch with Mallorie <2014-12-04 Thu 12:00 +1w> :PROPERTIES: :REPEAT_TO_STATE: APPT :END: #+END_SRC You can get this via C-c C-x p repeat_to_state RET APPT RET. Interestingly, there is a function in the same source file, org-auto-repeat-maybe, which suggests that it does exactly what you ask for. #+BEGIN_EXAMPLE org-auto-repeat-maybe is a compiled Lisp function in `org.el'. (org-auto-repeat-maybe DONE-WORD) Check if the current headline contains a repeated deadline/schedule. If yes, set TODO state back to what it was and change the base date of repeating deadline/scheduled time stamps to new date. This function is run automatically after each state change to a DONE state. [back] #+END_EXAMPLE I can see in the definition of the function it has an expression org-last-state, so maybe that suggests there is a way built-in (or intended to?), but I only took that quick look at the source. -- Brady