#orgmode TODO 상태와 org-clock은 같이 움직인다

less than 1 minute read

nil

(defun wicked/org-clock-in-if-starting ()
  "Clock in when the task is marked STARTED."
  (when (and (string= org-state "STARTED")
             (not (string= org-last-state org-state)))
    (org-clock-in)))
(add-hook 'org-after-todo-state-change-hook
          'wicked/org-clock-in-if-starting)
(defadvice org-clock-in (after wicked activate)
  "Set this task's status to 'STARTED'."
  (org-todo "STARTED"))

STARTED 상태가 되면 org-clock-in 함수를 호출하는 건 hook에 함수를 추가하면 된다. org-clock-in 함수를 실행했을 때, 자동으로 STARTED 상태로 바꿔주고 싶다. 제공하는 hook은 없다. 어떻게 해야 할까? advice 시스템을 사용하면 된다. 강력하다. 기존 함수를 수정할 필요 없다. 함수가 호출될 때, 어떤 코드를 추가로 실행하게 할지 손쉽게 추가할 수 있다.

Clocking Time with Emacs Org 글을 보고 필요한 코드를 복사했다.

C-x C-s C-x C-c