Как получить интерактивный текст, который вызывает функцию

#button #emacs

#кнопка #emacs

Вопрос:

Допустим, у меня есть следующий текст в буфере

 CMM-3:       Description
CMM-91:      Description 2
  

Я хочу, чтобы CMM-XX стал интерактивными областями, которые вызывают пользовательскую функцию

 (defun jira-ticket-view (amp;optional jira-ticket)
  "Open Jira Ticket Inside Emacs"
  (interactive)
  ....)
  

Как этого можно достичь в emacs / elisp?

Комментарии:

1. Режим организации — это первое, что приходит на ум; Вы могли бы рассмотреть возможность проверки источника для их обработки ссылок.

Ответ №1:

Создайте новую раскладку, привяжитесь mouse-1 к функции, которую вы хотите вызвать, и добавьте раскладку к тексту ссылки в качестве текстового свойства. Установите mouse-face в highlight и добавьте help-echo для дополнительного удобства пользователя — они вступают в силу, когда пользователь наводит указатель мыши на текст.

 (defun my-function ()
  (interactive)
  (message "You've clicked the text!"))

(let ((map (make-sparse-keymap)))
  (define-key map [mouse-1] 'my-function)
  (insert "Foo: "
          (propertize "bar" 'keymap map 'mouse-face 'highlight 'help-echo "Click here!")
          "n"))
  

Смотрите раздел Текст с возможностью кликабельности в справочном руководстве elisp для получения дополнительной информации.