Спасибо за указатель, p4bl0. К сожалению, это работает только на реальной ОС; Windows использует совершенно другой метод. См. http://kb.mozillazine.org/Register_protocol для получения дополнительной информации.
Но вы, конечно, обеспечили мне старт, в котором я нуждался, так что большое вам спасибо!
Вот решение для Windows:
Сначала вам нужно правильно настроить реестр для обработки этого нового типа URL. Для этого сохраните в файле следующее, отредактируйте его в соответствии со своей средой, сохраните его и дважды щелкните по нему:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\emacs]
@="URL:Emacs Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\emacs\shell]
[HKEY_CLASSES_ROOT\emacs\shell\open]
[HKEY_CLASSES_ROOT\emacs\shell\open\command]
@="\"c:\\product\\emacs\\bin\\emacsclientw.exe\" --no-wait -e \"(emacs-uri-handler \\\"%1\\\")\""
Это не так надежно, как сценарий оболочки p4bl0, потому что он не гарантирует, что Emacs будет запущен первым. Затем добавьте следующее в ваш файл .emacs:
(defun emacs-uri-handler (uri)
"Handles emacs URIs in the form: emacs:///path/to/file/LINENUM"
(save-match-data
(if (string-match "emacs://\\(.*\\)/\\([0-9]+\\)$" uri)
(let ((filename (match-string 1 uri))
(linenum (match-string 2 uri)))
(with-current-buffer (find-file filename)
(goto-line (string-to-number linenum))))
(beep)
(message "Unable to parse the URI <%s>" uri))))
Приведенный выше код не проверяет, существует ли файл, а обработка ошибок в лучшем случае является элементарной. Но это работает!
Затем создайте файл HTML, содержащий строки, подобные следующим:
<a href="emacs://c:/temp/my.log/60">file: c:/temp/my.log, line: 60</a>
и затем нажмите на ссылку.
Сценарий публикации:
Я недавно перешел на Linux (Ubuntu 9.10) и вот что я сделал для этой ОС:
$ gconftool -s /desktop/gnome/url-handlers/emacs/command '/usr/bin/emacsclient --no-wait -e "(emacs-uri-handler \"%s\")"' --type String
$ gconftool -s /desktop/gnome/url-handlers/emacs/enabled --type Boolean true
Используя тот же emacs-uri-handler
сверху.