* Customize org-todo-repeat-to-state to return to previous TODO state @ 2014-11-21 18:00 Grant Schissler 2014-11-21 20:56 ` Brady Trainor 0 siblings, 1 reply; 3+ messages in thread From: Grant Schissler @ 2014-11-21 18:00 UTC (permalink / raw) To: emacs-orgmode 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Customize org-todo-repeat-to-state to return to previous TODO state 2014-11-21 18:00 Customize org-todo-repeat-to-state to return to previous TODO state Grant Schissler @ 2014-11-21 20:56 ` Brady Trainor 2014-11-25 5:10 ` Grant Schissler 0 siblings, 1 reply; 3+ messages in thread From: Brady Trainor @ 2014-11-21 20:56 UTC (permalink / raw) To: Grant Schissler; +Cc: emacs-orgmode Grant Schissler <grant.schissler@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 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Customize org-todo-repeat-to-state to return to previous TODO state 2014-11-21 20:56 ` Brady Trainor @ 2014-11-25 5:10 ` Grant Schissler 0 siblings, 0 replies; 3+ messages in thread From: Grant Schissler @ 2014-11-25 5:10 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 3722 bytes --] Great, thanks for all the excellent advice and code! I decided to approach this locally with a capture template and put my repeating APPT tasks under my Calendar headline. I created this capture template that does the job: (setq org-capture-templates '(("c" "Calendar" entry (file+headline "~/grantMain.org" "Calendar") "* APPT %?\n%i\n%a\n:PROPERTIES:\n:REPEAT_TO_STATE: APPT\n:END:\n" :prepend t))) Grant On Fri, Nov 21, 2014 at 1:56 PM, Brady Trainor <algebrat@uw.edu> wrote: > Grant Schissler <grant.schissler@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 > [-- Attachment #2: Type: text/html, Size: 4800 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-11-25 5:10 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-11-21 18:00 Customize org-todo-repeat-to-state to return to previous TODO state Grant Schissler 2014-11-21 20:56 ` Brady Trainor 2014-11-25 5:10 ` Grant Schissler
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).