13

我在 org 模式下维护一个日记(包含要记住的想法的内部博客),有时,当我学习 Emacs 时,我将学习的技能和技巧与对信息文件的引用一起存储。

目前我执行以下操作。我打开所需的信息文件,按下c以复制当前节点名称,按下< s TAB- 这是一个简单的模板,可以展开为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 中嵌入指向信息文件的链接的最佳方法是什么?

编辑:我发现了如何将链接添加到信息节点。外部链接的组织模式手册描述了使用链接的这些等效方法:

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

对于第一个变体,我不确定如何自动转换(org) Tagsorg#Tags. 我怎样才能进一步简化这个过程?

4

3 回答 3

13

您可以像在任何受支持的链接类型中一样执行此操作(请参阅手册中的“处理链接”部分)。在 info 文件中,您说M-x org-store-link,(按照手册中的建议将其绑定到C-c l),然后在您的 org 文件中,插入带有C-c C-l. 在那里,您只需从存储的链接列表中选择指向您的信息文件的链接。

于 2012-05-04T17:16:26.683 回答
1

org-store-link访问 Info 页面时说“无法链接到未访问文件的缓冲区”,因为 Info 设置了buffer-nameto*info*buffer-file-nameto 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 节点名称不能直接访问(不是我可以很容易找到),我们可以通过调用Info-copy-current-node-name将它放在 中来解决它kill-ring,然后返回第一个条目kill-ring(应该是刚刚插入的节点名称)。

于 2013-01-25T21:27:09.713 回答
1

应该工作的步骤-转到您需要的信息节点,然后按'c'(节点名称将是杀死环的条目)-在您的组织源文件上转到您需要插入链接的点按Cc,Cl-按 T​​ab 然后选择 elisp: 从显示的提示缓冲区(或您需要的任何类型的链接)。现在您在迷你缓冲区中的提示说 elisp: - 在 ':' (info "^") 之后输入此上下文,让 ^ 成为您的节点名称由 Cy 拉回 - 按 Ret,然后您将被要求提供一些描述,只需填写您自己的。现在你已经完成了,但仍然不知道到底发生了什么。- Mx,可见性模式,以及如何手动编写该内容,我们现在得出的结论是“%20”必须替换上下文中出现的每个空格。eg.==>自己做,

于 2013-09-05T15:24:40.553 回答