org-agendaでは、〆切とスケジュールでTODOを管理するが、たまに、いくつかのタスクに分かれたTODOがある。こういうときは、TODOのヘッダに、
* TODO Aをして、Bをして、最後にCをする
のように書いておくしかない。しかし、org-ednaを使えば、このような構造的なTODOをまとめて管理できる。マニュアルにある例を紹介すると、
* TODO 洗濯機に服を入れる :PROPERTIES: :TRIGGER: next-sibling scheduled!("++1h") :END: <2024-12-08 Sun 13:00> * TODO 乾燥機に服を入れる :PROPERTIES: :TRIGGER: next-sibling scheduled!("++1h") :BLOCKER: previous-sibling :END: * TODO 服をたたむ :PROPERTIES: :TRIGGER: next-sibling scheduled!("++1h") :BLOCKER: previous-sibling :END: * TODO 服をしまう :PROPERTIES: :TRIGGER: next-sibling scheduled!("++1h") :BLOCKER: previous-sibling :END:
このような指定をすれば、上のタスクが完了するまで、次のタスクはorg agenda viewに表示されない。上のタスクが完了したら、自動的に1時間後にスケジュールされて、次のタスクが浮上する。これはほんの序の口で、タスク終了をトリガーにしてさまざまなことができる。
たとえば、次のように書くと、完了するのと同時に、そのタスクをアーカイブに移動させることができる。これはglobalに指定したい機能だ。
* TODO 服をしまう :PROPERTIES: :TRIGGER: self archive! :BLOCKER: previous-sibling :END:
部分的には、以下のような感じに。
(setq org-capture-templates '(("d" "🛑 [D]eadline" entry (file "") "* TODO %^{Describe task} %^g DEADLINE: %^T :PROPERTIES: :TRIGGER: self archive! :END: %? %i %a" :empty-lines 1 :jump-to-captured t )))
やっぱりorg-captureで、子タスクありのパターンを作ってみる。
* TODO %^{Describe task1} %^g # 親タスク 終了させると、自分自身と子タスクがアーカイブされる :PROPERTIES: :BLOCKER: children :TRIGGER: children archive! self archive! :END: ** TODO %^{Describe task2} # 最初に取りかかるタスク SCHEDULED: %^T :PROPERTIES: :TRIGGER: next-sibling scheduled!("++0M") :END: ** TODO %^{Describe task3} # 中間タスク 前のが終了すると表示される :PROPERTIES: :BLOCKER: previous-sibling :TRIGGER: next-sibling scheduled!("++0M") :END: ** TODO %^{Describe task4} # 最終タスク。これを終了させると、親タスクがスケジュールされ、agenda-viewに表示される :PROPERTIES: :BLOCKER: previous-sibling :TRIGGER: parent scheduled!("++0M") :END:
こういうテキストを capture01.org
などという名前で保存しておいて、org-captureで読み込む。まずtask2が表示され、それを終了させるとtask3が即座にスケジュールされ、(task3は必要なだけコピーする)、最後にtask4を終了させると親のtask1が出現し、それを終了させると、ツリー全体がアーカイブされる。
orgのTODO keywordの工夫。
* %(completing-read \"Todo keyword: \" org-todo-keywords-for-agenda nil t) %^{Describe task} %^G
これでもいいが、capture-templateの標準機能を使って、
* %^{todo keyword: |TODO|WAIT|IN_PROGRESS|VAGUE|UNFIXED} %^{Describe task} %^G
のようにするのがいいか。