web-dev-qa-db-ja.com

アウトラインツリーを新しいorg-modeファイルに再ファイルしますか?

Org-modeを使い始めたばかりで、新しいタスクとメモをorg-modeの「受信トレイ」ファイルに取り込むワークフローを想像しています。プロジェクトに成長するタスクの場合、それらを新しいorg-modeファイルに再ファイリングして、それをアジェンダに追加することを想像します。

org-mode manual は、同じファイル内のセクションのリファイリングのみを許可しているように見えることを除いて、ほとんど私が探している方法でツリーをリファイリングすることを説明しています。私がやりたいのは、そのツリーを取得して、新しいファイルに再ファイルすることです(そして、できればそのファイルを議題リストに追加します)。

新しいバッファにコピーして貼り付けてから、新しいバッファをアジェンダに追加することはできますが、これはorg-modeの神々が近道を持っているようなもののようです。

13
Peter

これは、必要に応じて変更できる、高速で不潔なelisp関数です。

(defun subtree-to-new-file()
(interactive)
 "組織のサブツリーを新しいファイルに移動するのをスムーズに支援します" 
(org- copy-subtree nil t)
 ;;;この長いsetqステートメントは、最初の見出しのタイトルを取得し、新しい.orgファイルのデフォルトファイル名として使用します。
(setqfirst-heading 
(with-temp-buffer 
(yank)
(beginning-of-buffer)
(search-forward "" nil nil 1)
 (setq title-start(point))
(end-of-visual-line)
(setq title-end(point))
(setq first-heading(buffer- substring title-start title-end))
))
(setq def-filename(concat first-heading ".org"))
(let((insert-default-ディレクトリt))
(find-file-other-window 
(read-file-name "Move subtree to file:" def-filename)
))
(org-paste-subtree)
 ;;;この最後のコマンドは、新しい.orgファイルをアジェンダに追加します
(org-agenda-file-to-front)
) 

*scratch*バッファに貼り付けて押すと、このコードを簡単に試すことができます。 Ctrl+j。次に、org-modeファイルのサブツリーに移動してヒットします Alt+xM-x subtree-to-new-fileへ。

Emacsを使用するたびに配置し、elispにまったく慣れていない場合は、このコードを.emacs構成ファイルのどこかに貼り付けて保存するのが最も簡単な方法です。関数の前後に行を追加して、キーバインディングを与えることもできます。これを行う最も簡単な方法(ただし、最善ではないかもしれません)は、(global-set-key "\C-xw" 'subtree-to-new-file)のようになります。

1
Brian Z

他のorg-modeバッファをリファイルリストに追加しすぎると、.emacsファイルに次のような行を追加する必要があります。これはBrentHansenの構成から取得しました( ここ を参照)

; Targets include this file and any file contributing to the agenda - up to 9 levels deep
(setq org-refile-targets (quote ((nil :maxlevel . 9)
                                 (org-agenda-files :maxlevel . 9))))

実際に必要なのは(org-agenda-files :maxlevel .9)だけで、他の部分は再ファイリングするレベルの最大数を設定します。