组织模式:嵌入信息文件的链接

时间:2012-05-04 08:24:57

标签: emacs elisp org-mode

我在org-mode中维护日记(包含要记住的想法的内部博客),有时候,当我研究Emacs时,我会通过引用信息文件存储学到的技巧和技巧。

目前,我执行以下操作。我打开所需的信息文件,按 c 复制当前节点名称,按< s TAB - 这是一个easy template,可以展开到src-block。然后我添加lisp表达式并粘贴节点名称,最后链接如下所示:

#+begin_src emacs-lisp
(info "(org) Properties and Columns")
#+end_src

当我需要查看信息文件时,我将光标放在lisp sexp之后并按 C-x C-e (eval-last-sexp)。

这个过程既乏味又不优雅。在org-mode中嵌入信息文件链接的最佳方法是什么?

编辑:我发现了如何添加指向信息节点的链接。 External links上的组织模式手册使用链接描述了这些等效方法:

[[info:org#Tags]]
[[elisp:(info "(org) Tags")]]

对于第一个版本,我不确定如何在(org) Tags中自动转换org#Tags。我该如何进一步简化这一过程?

3 个答案:

答案 0 :(得分:9)

您可以使用任何支持的链接类型(请参阅手册中的"Handling links"部分)。在信息文件中,您说M-x org-store-link, (按照手册中的建议将其绑定到C-c l),然后在您的组织中 文件,您插入C-c C-l的链接。你只需要 从存储的链接列表中选择指向您的信息文件的链接。

答案 1 :(得分:1)

访问“信息”页面时,

org-store-link说“无法链接到未访问文件的缓冲区”,因为“信息”会将buffer-name设置为*info*,将buffer-file-name设置为nil。要解决此问题,社区提供的如何添加链接到手册页(http://orgmode.org/manual/Adding-hyperlink-types.html)的示例可以稍微修改一下:

;; Modified version of contrib/lisp/org-man.el; see
;; (http://orgmode.org/manual/Adding-hyperlink-types.html#Adding-hyperlink-types)
(require 'org)

(org-add-link-type "info" 'org-info-open)
(add-hook 'org-store-link-functions 'org-info-store-link)

(defcustom org-info-command 'info
  "The Emacs command to be used to display an info page."
  :group 'org-link
  :type '(choice (const info)))

(defun org-info-open (path)
  "Visit the infopage on PATH.
   PATH should be a topic that can be thrown at the info command."
  (funcall org-info-command path))

(defun org-info-store-link ()
  "Store a link to an info page."
  (when (memq major-mode '(Info-mode))
    ;; This is a info page, we do make this link
    (let* ((page (org-info-get-page-name))
           (link (concat "info:" page))
           (description (format "Infopage for %s" page)))
      (org-store-link-props
       :type "info"
       :link link
       :description description))))

(defun org-info-get-page-name ()
  "Extract the page name from Info in a hackish way."
  ;; This works for `Info-mode'.
  ;; Hackity-hack: copy the node name into the kill ring.
  (Info-copy-current-node-name)
  ;; Just return the kill.
  (current-kill 0))

(provide 'org-info)

重要的一点接近结束:由于信息节点名称不能直接访问(不是我可以轻易找到),我们可以通过调用Info-copy-current-node-name将其放入{{1}中来解决它然后返回kill-ring中的第一个条目(应该是刚刚插入的节点名称)。

答案 2 :(得分:1)

应该起作用的步骤 - 转到您需要的信息节点,然后按“c”(节点名称将是   进入杀人戒指) - 在您的组织源文件上指出您需要插入链接   按C-c,C-1 - 按Tab键,然后从显示的提示缓冲区(或任何类型)中选择elisp:   你需要的链接)。现在你的迷你缓冲区提示说elisp: - 在':'(info“^”)之后输入这个上下文,让^成为你的   node-name由C-y拉回来 - 按Ret键,然后你会要求填写一些说明   你自己。现在你完成了它,但仍然不知道发生了什么   真。 - M-x,可见性模式,以及如何手动编写该内容   我们现在得出结论,“%20”必须全部替换   在上下文中出现空间。   例如==&GT。自己动手,亲自看看 - 切换您的可见性模式 好运