2

我在 Mac 上运行了 TextMate,它有txmt协议,我可以在 Web 浏览器上使用它,例如txmt://open/?url=file:///Users/smcho/smcho/bin/rst2html. 我可以使用 TextMate 来编辑 rst2html。

但是,当我尝试将此协议与 Org-mode as 一起使用时[txmt://open/?url=file:///Users/smcho/smcho/bin/rst2html],而不是打开 TextMate,rst2html 二进制文件正在运行。

我试过

(setq org-link-abbrev-alist
 '(
   ("edit" . "txmt://open/?url=file://%s")
))

使用[edit:/Users/smcho/smcho/bin/rst2html],但我得到相同的结果。

如何在 Org 模式下使用特定协议(在我的情况下为:txmt)?

添加

它不使用协议,但可以使用此命令打开并编辑某些文件。

("edit" . "shell:/usr/local/bin/mate %s")
4

2 回答 2

2

我相信 org-mode 只能处理此页面上指定的链接(可能还有其他一些链接类型,例如指向 git repos 的链接,由 contrib 包提供)。我不是 TextMate/Apple 用户,但在我看来,问题中的 txmt:// 协议只是 TextMate 为已安装的浏览器设置的处理程序;你不能指望这适用于 org.

真正的问题是——您能否设置一个链接以便在 TextMate 中打开特定文件。最直接的方法是发出一个 shell 命令,该命令将在 TextMate 中打开文件。使用 org-link-abbrev-alist,您可以执行类似("edit" . "shell:/path/to/textmate_binary %s &"). 您还需要使用(setq org-confirm-shell-link-function nil)来抑制确认提示。

通常,始终可以创建自定义链接类型,如此所述;这涉及在 elisp 中编写处理程序函数。在这种情况下,这将是使用 eg 启动 TextMate 的调用start-process。这将是一个更清洁的解决方案,但可能不值得付出额外的努力。在自定义组织链接处理程序时,通常设置快捷方式 viaorg-link-abbrev-alist或基于扩展名设置处理程序via 就足够了org-file-apps

于 2011-02-18T21:02:23.240 回答
0

这是一个老问题,但我最近在我的 Mac ( http://www.mekentosj.com )上的 Papers.app 链接上遇到了类似的问题。Papers 提供了一个链接协议(“papers2:”)用于引用其库中的文档,例如:“papers2://publication/uuid/4319127A-3FD5-4DB9-A3F8-1881AC937B74”

我希望能够将这些链接存储在我的 org-mode 文档中,并在访问此链接时让 org 打开 Papers.app。(\抄送\公司)

在 Mac 上,您可以将这样的链接指定为“打开”shell 命令的参数,并由相应的应用程序处理它们。

下面的代码将 org-mode 配置为发送任何看起来像它具有通过外壳“打开”的协议的链接。的文档org-open-link-functions表明在处理已知的外部链接之后,但在文本搜索开始之前调用此钩子。

此配置应适用于原始 TextMate 问题,无需修改。

(defun org-pass-link-to-system (link)
  (if (string-match "^[a-zA-Z0-9]+:" link)
    (shell-command (concat "open " link))
    nil)
  )

(add-hook 'org-open-link-functions 'org-pass-link-to-system)
于 2013-04-16T20:03:07.137 回答