emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* 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).