org-mode中怎么链接到*help*文档里面

比如我现在在org-mode中学习emacs的

C-c C-c [[这里面我想链接到 C-h k C-c C-c RET后的页面]]

要怎么写

你可以在链接中塞入elisp命令

[[elisp:(describe-key (kbd "C-c C-c"))][C-c C-c]]

前提是你没有改动当前 C-c C-c 的绑定。

如果你改绑定了,可以用

[[elisp:(describe-function 'org-ctrl-c-ctrl-c)][org-ctrl-c-ctrl-c]]


update:

如楼下所说,显然使用org-store-link是更符合org工作流的方法

3 个赞

在HELP BUFFER里,你可以尝试使用命令org-store-link来存储一个当前位置的链接,然后在你想要插入链接的地方再使用org-insert-link来插入你之前存储的链接。 对于你的例子,org-store-link生成的链接是

help:org-ctrl-c-ctrl-c

插入的链接文本是

[[help:org-ctrl-c-ctrl-c][link to C-c C-c]]

感觉这个方法要比前面A7R7描述的方法更通用一些,可以用在HELP BUFFER以外的地方。

1 个赞

org-store-link 更好。

事实上,你可以为任何 buffer 创建一个 link ,比如说 help 链接的实现就非常简单:

(defun org-link--open-help (path _)
  "Open a \"help\" type link.
PATH is a symbol name, as a string."
  (pcase (intern path)
    ((and (pred fboundp) function) (describe-function function))
    ((and (pred boundp) variable) (describe-variable variable))
    (name (user-error "Unknown function or variable: %s" name))))

(defun org-link--store-help ()
  "Store \"help\" type link."
  (when (eq major-mode 'help-mode)
    (let ((symbol
           (save-excursion
	     (goto-char (point-min))
             ;; In case the help is about the key-binding, store the
             ;; function instead.
             (search-forward "runs the command " (line-end-position) t)
             (read (current-buffer)))))
      (org-link-store-props :type "help"
                            :link (format "help:%s" symbol)
                            :description nil))))

(org-link-set-parameters "help"
                         :follow #'org-link--open-help
                         :store #'org-link--store-help)

这样做更契合 org 的工作流,比如说方便后续导出的处理等。

2 个赞

这个是自己写的插件?

这是 org 内置的,更多的链接类型可以看 External Links (The Org Manual)

我的意思是增加新的链接类型很方便,只需要用 org-link-set-parameters 就好了。

明白了,谢谢大佬