#+STARTUP: showeverything #+COLUMNS: %ITEM %For %Start %Elapsed %REMAINS %Message #+TODO: TODO RUNNING | DONE Recipe with timers * First evaluate this (or put in your .emacs) #+begin_src emacs-lisp (require 'org-timer) (defun my/recipe-timer-start () "When state is changed to `RUNNING', change the `Start' property of the entry to the current value of org-timer if this is a timed recipe entry, i.e. if it has a h:m:s-formatted duration in its `For' property. When state is changed to `DONE', reset `Start' to `-'." (when (string-match org-timer-re (or (org-entry-get (point) "For") "")) (cond ((string= state "RUNNING") (org-set-property "Start" (org-timer nil t))) ((string= state "DONE") (org-set-property "Start" "-"))))) (setq org-after-todo-state-change-hook 'my/recipe-timer-start) #+end_src #+results: : my/recipe-timer-start * Recipe Here's the dynamic block with the overview. - Refresh manually with `C-c C-c' on the `begin' line. - Note that this will start the timer if it's not running. - The countdown is in the "REMAINS" column. #+begin: columnview :id local | ITEM | For | Start | Elapsed | REMAINS | Message | |-----------------------+---------+-------+---------+---------+---------| | * Recipe | | | 0:00:00 | | | | ** TODO Let simmer | 0:40:00 | - | 0:00:00 | | | | ** TODO Let ferment | 2:00:00 | - | 0:00:00 | | | | ** TODO Leave in oven | 0:04:00 | - | 0:00:00 | | | #+tblfm: $4='(org-timer nil t)::$5='(if (string-match org-timer-re $3) (org-timer-secs-to-hms (- (org-timer-hms-to-secs $2) (org-timer-hms-to-secs $4))) "")::$6='(if (< (org-timer-hms-to-secs $5) 0) "STOP!" "") #+end: Below are a few tasks with durations in their `For' properties. - Start them by changing the task's state to `RUNNING' with `C-c C-t'. (If org-timer is not running, it will be started.) - When time's up for a task, it will message `STOP!'. Navigate to the task and change its state to `DONE' with `C-c C-t' (after taking stuff out of the oven, or whatever). - When you're done, you can [[elisp:org-timer-stop][stop the timer]] (click the link or press `C-u C-c C-x ,'). ** TODO Let simmer :PROPERTIES: :For: 0:40:00 :Start: - :END: ** TODO Let ferment :PROPERTIES: :For: 2:00:00 :Start: - :END: ** TODO Leave in oven :PROPERTIES: :For: 0:04:00 :Start: - :END: