【问题标题】:Org-mode: embed links to info files组织模式:嵌入信息文件的链接
【发布时间】:2012-05-13 18:56:01
【问题描述】:

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

目前我执行以下操作。我打开所需的信息文件,按 c 复制当前节点名称,按 - 这是一个 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。我怎样才能进一步简化这个过程?

【问题讨论】:

    标签: emacs elisp org-mode


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      应该工作的步骤 - 转到您需要的信息节点,然后按“c”(节点名称将是 进入杀戒) - 在您的组织源文件中转到您需要插入链接的位置 按 C-c,C-l - 按 Tab 然后选择 elisp:从显示的提示缓冲区(或任何类型 您需要的链接)。现在您在迷你缓冲区中的提示说 elisp: - 在 ':' (info "^") 之后输入这个上下文,让 ^ 成为你的 节点名由 C-y 拉回 - 按 Ret,然后你会被要求提供一些描述,只需填写 你自己。现在你已经完成了,但仍然不知道会发生什么 真的。 - M-x,可见性模式,以及如何手动编写该内容和 我们现在得出的结论是“%20”必须替换每个 空间在语境中的出现。 eg.==> 自己做,自己看 - 切换回你的可见性模式 祝你好运

      【讨论】:

        【解决方案3】:

        org-store-link 在访问 Info 页面时说“无法链接到未访问文件的缓冲区”,因为 Info 将 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 将其放入kill-ring 来解决它,然后返回kill-ring 中的第一个条目(应该是刚刚插入的节点名称)。

        【讨论】:

        • 请注意,此信息在 2013 年是真实的,但至少自 2017 年以来就不再真实。org-store-link 现在可以在没有外部辅助功能的情况下正确处理 Info 文件。
        • 如果您在 2017 年之后阅读本文并且 org-store-link 在默认情况下似乎仍然无法正确处理信息缓冲区,请确保 'ol-infoorg-modules 中。至少在 2021 年,Doom emacs 会默认省略它,可以通过 (after! org (add-to-list 'org-modules 'ol-info)) 进行补救。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多