アウトラインパス補完を介してポイントに組織IDリンクを挿入


11

現在、内部のorg-mode org-idリンクを挿入するために、見出しに移動するか、議題ビュー(Ca s見出しテスト検索RET)でプルアップし、Cl(org-store-link)でリンクを保存し、どこに戻るかリンクを挿入してから、Cc Cl(org-insert-link)でリンクを挿入します。

代わりに、org-refile(Cc Cw)と同様のタブ補完を使用して、現在のポイントにリンクを挿入できるキーをマップすることをお勧めします。意図した結果は、次の形式のorg-id内部リンクになります。

[[id:d7534b2f-c221-4dea-8566-d5ce3e4e1b78][Example Link]]

org-id.elを見ると、org-id-get-with-outline-path-completionがこの目的のために設計されているようです。私は試した:

(global-set-key "\C-ci" (lambda () (interactive) (org-id-get-with-outline-path-completion)))

しかし、意図したとおりに機能しませんでした。

私のinit.elファイルには次のものが含まれています。

;; Use global IDs
(require 'org-id)
(setq org-id-link-to-org-use-id t)

;; Update ID file .org-id-locations on startup
(org-id-update-id-locations)

;; Refile options
(setq org-refile-targets (quote ((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9))))
(setq org-refile-use-outline-path 'file)
(setq org-outline-path-complete-in-steps t)
(setq org-refile-allow-creating-parent-nodes t)

に「-」がありませんorg-id-get-with outline-path-completion。それは問題ですか?
erikstokes

残念ながらそうではありません。それは単なる誤植です。質問を更新しました。
sk8ingdom

残念な。それはどのように失敗していますか?試してみるとうまくいきます。
erikstokes 2015年

関数は確実に呼び出されます。それは私にエントリを促し、タブ補完を介してナビゲートすることを可能にします(これは素晴らしいですが、意図したとおりに機能します)が、Enterキーを押すと、リンクを貼り付ける代わりに、Ccと同様に現在の見出しにカーソルを移動しますCu(上向きの見出し)。
sk8ingdom

これは古いバージョンの組織が原因である可能性があると思いましたが、Emacs 24.5で最新のものを試したので、私の構成に何かがあるはずです。上記の私のコードが実際にリンクを挿入していることを誰かが確認できますか?
sk8ingdom

回答:


6

私はorgモードのソースをざっと見て、最小限の文書化された機能を見つけました。関数を定義すると、org-TYPE-complete-linkタイプのリンクを補完するために使用されますTYPE。したがって、必要なorg-id-complete-linkことは、補完を実行してリンク(「id:」接頭辞を含む)を返す関数を定義することだけです。

(defun org-id-complete-link (&optional arg)
  "Create an id: link using completion"
  (concat "id:"
          (org-id-get-with-outline-path-completion)))

リンクを通常の方法で(を使用してC-c C-l)挿入し、タイプとして「id:」を選択すると、完了関数が起動します。

編集:org-modeバージョン9.0以降、上記のように関数を定義するだけでは機能しなくなりました(ref)。代わりに、org-link-parameters使用する補完関数を追加する必要があります

(org-link-set-parameters "id"
                         :complete 'org-id-complete-link)

これは優れており、意図したとおりに機能します!私が行った唯一の変更は、org-refile-targetsをorg-id-get-with-outline-path-completionの引数として追加することでした。そうすれば、私の組織ファイルのどれからでもリンクを取得できます。ご協力いただきありがとうございます!
sk8ingdom

@ sk8ingdom最終的なソリューションを含めるように質問を更新できますか?ドキュメントの意味がTARGETS may be a setting for ‘org-refile-targets’ to define eligible headlines.
わかり

最後の解決策は、上記の関数を定義し、9 org-link-set-parametersを使用している場合にも呼び出すことですorg-mode。追加の引数を使用すると、ファイルを整理するときとorg-id-get-with-outline-path-completion同じように、選択した見出しを制限org-refile-targetsできます。すべてのヘルプを参照してください。ただし、一般的な設定では((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))、議題ファイルの深さが3レベル、現在のバッファーが2レベルに制限されています。
erikstokes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.