From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brady Trainor Subject: Re: Customize org-todo-repeat-to-state to return to previous TODO state Date: Fri, 21 Nov 2014 12:56:02 -0800 Message-ID: <87oas0z319.fsf@uw.edu> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:52775) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XrvFY-0001Iq-Sb for emacs-orgmode@gnu.org; Fri, 21 Nov 2014 15:56:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XrvFR-0000oV-8o for emacs-orgmode@gnu.org; Fri, 21 Nov 2014 15:56:16 -0500 Received: from mail-pd0-f175.google.com ([209.85.192.175]:50883) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XrvFR-0000oP-3K for emacs-orgmode@gnu.org; Fri, 21 Nov 2014 15:56:09 -0500 Received: by mail-pd0-f175.google.com with SMTP id y10so6042686pdj.6 for ; Fri, 21 Nov 2014 12:56:07 -0800 (PST) In-Reply-To: (Grant Schissler's message of "Fri, 21 Nov 2014 18:00:15 +0000 (UTC)") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Grant Schissler Cc: emacs-orgmode@gnu.org Grant Schissler 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