org-modeで完了タスクを一気にアーカイブ

EmacsWiki: org-extension.el に org-archive-all-done-item という激しく便利そうな関数を見つけたので、導入してみた。

我が輩のorg環境はhowmと併用している。
アーカイブ先指定の org-archive-location がデフォルト値の "%s_archive::" だと、ファイルのネーミングルールが崩れてしまうので、"::* Archived Tasks"に設定してある。

(setq org-archive-location "::* Archived Tasks")

この設定だと、同一ファイルの最後の方に、* Archived Tasks という項目が出来、その中に終了タスクが移動するという仕組みだ。

しかし、この設定が問題を引き起こす。
オリジナルのorg-archive-all-done-item は、"* Archived Tasks" に終了タスクを移動する設定だと、永久ループに陥ってしまう。orz
そこで、えいやぁと書き換えてみた。
以下そのリスト

(defun org-archive-all-done-item ()
  "Archive all item that have with prefix DONE."
  (interactive)
  (save-excursion
    (show-all)
    (goto-char (point-min))
    (while (search-forward-regexp "^[\\*]+ DONE" nil t)
      (if (search-backward-regexp "^[\\*]+ Archived Tasks" nil t)
          (goto-char (point-max))
        (org-advertized-archive-subtree)))
    (message "Archive finished")
    (org-display-all-todo-item)))

最後の org-display-all-todo-item を削除すれば、org-extension.el が無くても動く。
非常に便利なので、お試しあれ。