Как я могу использовать определенный протокол (в моем случае: txmt) в режиме Org? - PullRequest
2 голосов
/ 18 февраля 2011

У меня TextMate работает на Mac, и у него есть протокол txmt , который я могу использовать как в веб-браузере, например txmt://open/?url=file:///Users/smcho/smcho/bin/rst2html. Я могу использовать TextMate для редактирования rst2html.

Однако, когда я попытался использовать этот протокол с режимом Org как [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], но я получаю тот же результат.

Как я могу использовать определенный протокол (в моем случае: txmt) в режиме Org?

ДОБАВЛЕНО

Он не использует протокол, но можно открыть и отредактировать какой-нибудь файл с помощью этой команды.

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

Ответы [ 2 ]

2 голосов
/ 19 февраля 2011

Я полагаю, что org-mode может обрабатывать только ссылки, указанные на этой странице (и, возможно, некоторые другие типы ссылок, например, ссылки на репозитории git, любезно предоставлены пакетами contrib). Я не пользователь TextMate / Apple, но мне кажется, что рассматриваемый протокол txmt: // - это просто обработчик, устанавливаемый TextMate для установленных браузеров; вы не можете ожидать, что это сработает с орг.

Реальный вопрос - можете ли вы установить ссылку, чтобы определенный файл открывался в TextMate. Самый простой способ - ввести команду оболочки, которая откроет файл в TextMate. Используя org-link-abbrev-alist, вы можете сделать что-то вроде ("edit" . "shell:/path/to/textmate_binary %s &"). Вы также можете использовать (setq org-confirm-shell-link-function nil) для подавления запроса на подтверждение.

В общем случае всегда можно создать пользовательские типы ссылок, как описано здесь ; это включает в себя написание функции обработчика в elisp. В этом случае это будет вызов для запуска TextMate с использованием, например, start-process. Это было бы более чистое решение, но, вероятно, не стоит дополнительных усилий. При настройке обработчиков ссылки org обычно достаточно установить ярлыки с помощью org-link-abbrev-alist или настроить обработчики на основе расширения с помощью org-file-apps.

0 голосов
/ 17 апреля 2013

Это старый вопрос, но недавно у меня была похожая проблема со ссылками на Papers.app на моем Mac (http://www.mekentosj.com). Papers предоставляет протокол ссылок ("apers2: ") для ссылки на документы в его библиотеке , например: "apers2: // публикация / uuid / 4319127A-3FD5-4DB9-A3F8-1881AC937B74 "

Я хотел иметь возможность хранить эти ссылки в своем документе в режиме org и открывать Papers.app в org при посещении этой ссылки. (\ C-C \ C-о)

На Mac вы можете указывать подобные ссылки в качестве аргумента команды оболочки "open", и соответствующее приложение обрабатывает их.

Приведенный ниже код настраивает режим org для отправки любой ссылки, которая выглядит так, как будто у нее есть протокол для «открытия» через оболочку. Документация для 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)
...