既知の固定場所へのorg-refile


11

見出しを取り、特定の場所にファイルを整理する関数を記述しようとしています。のドキュメントorg-refile

(org-refile &optional GOTO DEFAULT-BUFFER RFLOC MSG)

そして、RFLOCあります

RFLOC can be a refile location obtained in a different way.

しかし、私は「別の方法」がどうなるかについての手がかりがなく、半日グググルしていて、例を見ていません。私はファイルを知っており、ターゲットの見出しも知っていますが、それを目的の形式にするための構文がわかりません。私が得た最も近いものは:

(org-refile nil #("~/Org/bookmarks.org")

すると見出しが表示されますが、もちろん表示したくないので、提供します。

私はelispを初めて使用するので、考えられるすべての構文を推測しました。誰もがこれを言い表す方法を知っていますか?


ここで実際にやりたいことを行う方法があるはずですが、それが見つからない場合の回避策は次のとおりです。stackoverflow.com
Brian Z

私はあなたが求めているものを行うには、次のスニペットを使用: (let* ( (org-archive-location "/path/to/org-file::* NAME_OF_HEADING") (org-archive-save-context-info nil)) (org-archive-subtree)) あなたがについて尋ねたので、私はおそらく、答えにこれを置くことはありませんorg-refileが、スニペットは非常にうまく仕事をしていません。二つのコロンがされている必要がありました。私はいつもこれを使用しており、org-archive-subtree組織ファイル全体を自動的に再編成するときに何百もないように、メッセージを抑制するカスタムバージョンを作成しています。
法律家2015

ローリストに感謝します。これは素晴らしいスニペットであり、おそらく別のコンテキストで使用します。ここに文書化しておくと便利です。
jtgd

回答:


9

以前はRFLOCがどのように見えるべきか疑問に思いましたが、調査したことはありません。組織のソースコードを見ると、次のようなリストになっているはずです。

  • 見出し
  • ファイル
  • re(正規表現)
  • pos(ターゲット見出しの位置)

re要素については実験していませんが、ここではorg-refile、特定のFILEとHEADINGから構築されたRFLOCで呼び出す単純な関数を示します。

(defun my/refile (file headline)
  (let ((pos (save-excursion
               (find-file file)
               (org-find-exact-headline-in-buffer headline))))
    (org-refile nil nil (list headline file nil pos))))

これにより、ターゲットファイルが開き、org関数を使用してターゲットヘッドラインの位置を見つけ、RFLOCリストを作成してに渡しorg-refileます。


5

@glucasに感謝します。私はあなたの解決策を私の最終的な解決策に組み入れました。重要な情報は、RFLOCの形式を知ることでした。私はファイル名と見出しテキストのリストを提供する実験をしましたが、それらの他の要素と余分なnilがありませんでした。これは私が終わったものです:

(defun jay/refile-to (file headline)
    "Move current headline to specified location"
    (let ((pos (save-excursion
                 (find-file file)
                 (org-find-exact-headline-in-buffer headline))))
      (org-refile nil nil (list headline file nil pos))))

(defun jay/refile-to-bookmarks ()
    "Move current headline to bookmarks"
    (interactive)
    (org-mark-ring-push)
    (jay/refile-to "~/Org/bookmarks.org" "New")
    (org-mark-ring-goto))

のドキュメントにsave-excursionは、元の場所に戻ると記載されていますが、そのようには機能していないようです。それは私をターゲットの目的地に残しますが、これは将軍にとって適切かもしれませんがrefile-to、私はそれが行を移動し、私がいた場所に留まるようにしたかったので、内で保存および復元しましたrefile-to-bookmark

これが意図するワークフローは、RSSフィードを読み取るためのスクリプトからのHTMLリンクのリストから始めることです。もともとはスクリプトでmu4e用のmaildirファイルを生成していましたが、とにかくブラウザーへのリンクをたどり、関心のあるものにブックマークを付けているだけなので、** [[uri][title]]行のリストを生成するだけです。emacsからuzblブラウザーへのリンクをたどった後、ブックマークを付ける(同じ形式の行を生成する)代わりに、このコマンドを使用して、タグを設定した後、リンクを私のbookmarks.orgに移動します。org speed-commandsを使用して、tタグ付けしたりb、このコマンドを実行したりするので、少し速くなります。私は今幸せで、もっとelispを学ぶのが大好きです!


ここで行うこととは直接関係のない2つの詳細:RFLOCの最初の要素は、実際には任意の文字列にすることができます。「refiled to xxx」メッセージに示されている、ターゲットの場所の論理名としてのみ使用されています。場所は、実際にはファイルと位置マーカーによって定義されます。re私が知る限り、RFLOC の要素は無視されます。ターゲットの場所を処理するorg.elの他のいくつかの関数で使用されます。
グルカ2015

1
理由がわからないのでrefile-tolet:の後ろにこれを追加して、関数を元の位置に戻すことができました(switch-to-buffer (current-buffer))。これは何もすべきではないようですが、私にとってはうまくいきます。
グルカ2015

@glucasに感謝します。はい動作するようには思えないし、私は自分を置き換えてきたこと-push-gotoそれと。別のバッファーに残っているのは奇妙に思えますが、現在のバッファーは以前のバッファーと見なされます。
jtgd 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.