org-refile

概要

org-refile は org-mode の1機能で org-mode のエントリを別のファイルなどに移動するための機能。実はコピーもできるけど、コピーは使ったことがない。

設定

org ファイル内の階層を選択候補に入れる

これを nil に設定することでファイルの選択だけでなく、その中の PATH まで選択できるようになる

(setq org-outline-path-complete-in-steps nil)

refile ターゲットにファイル名を含める

以下のように設定すると refile のターゲット候補としてファイル名とその中の PATH が表示されるようになる。

(setq org-refile-use-outline-path 'file)

nil だと移動先候補PATHの最後の部分しか表示されないのでどのファイルのどの場所かというのがわかりにくいのでこのように設定している。

refile 先の候補設定

いくつかの org ファイルを使っているのでターゲットを以下のように設定している。

なお関数化することで hook で呼び出せるようにしている

(defun my/reset-org-refile-targets ()
  (setq org-refile-targets `((,(org-journal--get-entry-path) :regexp . "Tasks")
                             (,(concat org-directory "tasks/projects.org") :level . 1)
                             (,(concat org-directory "tasks/pointers.org") :level . 1)
                             (,(concat org-directory "tasks/someday.org") :level . 1))))

(my/reset-org-refile-targets)
ターゲット 目的
org-journal–get-entry-path その日の journal ファイルに、その日やるつもりのタスクを放り込むため。
projects.org とりあえずその内やるタスクを放り込むところ。Work, Private の階層を設けているので :level 2 としている
pointers.org 読物を突っ込むところとしている。