org-refile は org-mode の1機能で org-mode のエントリを別のファイルなどに移動するための機能。実はコピーもできるけど、コピーは使ったことがない。
これを nil に設定することでファイルの選択だけでなく、その中の PATH まで選択できるようになる
(setq org-outline-path-complete-in-steps nil)
以下のように設定すると refile のターゲット候補としてファイル名とその中の PATH が表示されるようになる。
(setq org-refile-use-outline-path 'file)
nil だと移動先候補PATHの最後の部分しか表示されないのでどのファイルのどの場所かというのがわかりにくいのでこのように設定している。
いくつかの 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 | 読物を突っ込むところとしている。 |