Applied, thanks. - Carsten On Oct 16, 2008, at 4:51 PM, James TD Smith wrote: > Allow org-clock-in-switch-to-state to be a function. This lets you > have > different clocked in states for different TODO keyword sets, for > example > > (defun ahkt-clock-state (state) > (cond ((string= state "TOREAD") "READING") > ((string= state "TOWATCH") "WATCHING") > (t state))) > > Also fix indentation on clock lines, and empty clock drawers when > they are > inserted. > --- > lisp/ChangeLog | 14 ++++++++++++-- > lisp/org-clock.el | 35 ++++++++++++++++++++++------------- > 2 files changed, 34 insertions(+), 15 deletions(-) > > diff --git a/lisp/ChangeLog b/lisp/ChangeLog > index 05e734c..0bca2be 100755 > --- a/lisp/ChangeLog > +++ b/lisp/ChangeLog > @@ -1,3 +1,13 @@ > +2008-10-15 James TD Smith > + > + * org-clock.el (org-clock-in-switch-to-state): Allow this to be a > + function > + (org-clock-in): If `org-clock-in-switch-to-state' is a function, > + call it with the current todo state to get the state to switch to > + when clocking in. > + (org-clock-in): Use org-indent-line-function to indent clock lines. > + (org-clock-find-position): Fix indentation of empty clock drawers. > + > 2008-10-14 Carsten Dominik > > * org-export-latex.el (org-export-latex-preprocess): Improve > @@ -66,7 +76,7 @@ > * org-clock.el (org-clock-heading-for-remember): New variable. > (org-clock-in): Set `org-clock-heading-for-remember'. > > -2008-10-01 James TD Smith > +2008-10-01 James TD Smith > > * org-remember.el (org-remember-apply-template): Add new > expansions: %k, %K for currently clocked task and a link to the > @@ -175,7 +185,7 @@ > > * org-export-latex.el (org-export-latex-keywords-maybe): Bug fix. > > -2008-09-22 James TA Smith > +2008-09-22 James TD Smith > > * org-plot.el (org-plot/gnuplot): Make tables starting with a > hline work correctly. > diff --git a/lisp/org-clock.el b/lisp/org-clock.el > index 4a14100..56894cc 100644 > --- a/lisp/org-clock.el > +++ b/lisp/org-clock.el > @@ -67,12 +67,16 @@ A nil value means, clock will keep running until > stopped explicitly with > > (defcustom org-clock-in-switch-to-state nil > "Set task to a special todo state while clocking it. > -The value should be the state to which the entry should be switched." > +The value should be the state to which the entry should be > +switched. If the value is a function, it must take one > +parameter (the current TODO state of the item) and return the > +state to switch it to." > :group 'org-clock > :group 'org-todo > :type '(choice > (const :tag "Don't force a state" nil) > - (string :tag "State"))) > + (string :tag "State") > + (symbol :tag "Function"))) > > (defcustom org-clock-history-length 5 > "Number of clock tasks to remember in history." > @@ -265,12 +269,16 @@ the clocking selection, associated with the > letter `d'." > (org-back-to-heading t) > (or interrupting (move-marker org-clock-interrupted-task nil)) > (org-clock-history-push) > - (when (and org-clock-in-switch-to-state > - (not (looking-at (concat outline-regexp "[ \t]*" > - org-clock-in-switch-to-state > - "\\>")))) > - (org-todo org-clock-in-switch-to-state)) > - (setq org-clock-heading-for-remember > + (cond ((functionp org-clock-in-switch-to-state) > + (looking-at org-complex-heading-regexp) > + (let ((newstate (funcall org-clock-in-switch-to-state (match- > string 2)))) > + (if newstate (org-todo newstate)))) > + ((and org-clock-in-switch-to-state > + (not (looking-at (concat outline-regexp "[ \t]*" > + org-clock-in-switch-to-state > + "\\>")))) > + (org-todo org-clock-in-switch-to-state))) > + (setq org-clock-heading-for-remember > (and (looking-at org-complex-heading-regexp) > (match-end 4) > (org-trim (buffer-substring (match-end 1) (match-end 4))))) > @@ -283,9 +291,9 @@ the clocking selection, associated with the > letter `d'." > (t "???"))) > (setq org-clock-heading (org-propertize org-clock-heading 'face > nil)) > (org-clock-find-position) > - > + > (insert "\n") (backward-char 1) > - (indent-relative) > + (org-indent-line-function) > (insert org-clock-string " ") > (setq org-clock-start-time (current-time)) > (setq ts (org-insert-time-stamp (current-time) 'with-hm 'inactive)) > @@ -348,11 +356,12 @@ the clocking selection, associated with the > letter `d'." > (or (bolp) (newline))) > (when (eq t org-clock-into-drawer) > (insert ":CLOCK:\n:END:\n") > - (beginning-of-line -1) > + (beginning-of-line 0) > (org-indent-line-function) > + (beginning-of-line 0) > (org-flag-drawer t) > - (beginning-of-line 2) > - (org-indent-line-function))))) > + (org-indent-line-function) > + (beginning-of-line 2))))) > > (defun org-clock-out (&optional fail-quietly) > "Stop the currently running clock. > -- > 1.6.0.2 > > > > _______________________________________________ > Emacs-orgmode mailing list > Remember: use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode