In "how I get work done with Emacs and org-mode" I talked about how I manually
switch a task to IN-PROGRESS
when I start working on it. It's not a huge
inconvenience, but I did wonder if I could configure Emacs to do it for me.
Of course there's a feature for that.
There are two variables that can be used to configure org's behaviour when clocking time:
org-clock-in-switch-to-state
- The state to change a task to when clocking in.
org-clock-out-switch-to-state
- The state to change to when clocking out.
Both of these variables can either be a string
which will be the new state, or
they can be a function. If they're a function it must accept ONE parameter - the
task's current state - and return the state to switch to.
In practice it looks like this:
;; Always change the task to IN-PROGRESS. (setq org-clock-in-switch-to-state "IN-PROGRESS") ;; Use a function to decide what to change the state to. (setq org-clock-in-switch-to-state #'sodaware/switch-task-on-clock-start) (defun sodaware/switch-task-on-clock-start (task-state) "Change a task to 'IN-PROGRESS' when TASK-STATE is 'TODO'." (if (string= task-state "TODO") "IN-PROGRESS" task-state))
It's a small change, but it smooths out a slight wrinkle in my workflow.