通过轮廓路径完成在点处插入组织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

Answers:


6

我在组织模式源中四处查看,发现了一个文档最少的功能。如果定义一个函数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-mode9.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.
kshenoy

最终的解决方案是定义上面的函数,org-link-set-parameters如果使用的是org-mode9 ,也将调用它。额外的参数org-id-get-with-outline-path-completion让您可以限制选择的标题,就像重新org-refile-targets归档时一样。请参阅帮助的所有内容,但是一个通用设置是((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))将议程文件中的内容限制为3个级别,将当前缓冲区中的内容限制为2个级别。
erikstokes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.