emacs: Turn id:"<message-id>" elements into buttons for notmuch searches

This fixes the minor annoyance that message ids were parsed as mail
addresses by goto-address-mode in notmuch-show buffers.
This commit is contained in:
Daniel Schoepe 2011-10-28 16:48:58 +02:00 committed by David Bremner
parent e6d85fb97d
commit 4a4ada73b7

View file

@ -27,6 +27,7 @@
(require 'mm-decode) (require 'mm-decode)
(require 'mailcap) (require 'mailcap)
(require 'icalendar) (require 'icalendar)
(require 'goto-addr)
(require 'notmuch-lib) (require 'notmuch-lib)
(require 'notmuch-query) (require 'notmuch-query)
@ -789,6 +790,24 @@ current buffer, if possible."
(defvar notmuch-show-buffer-name nil) (defvar notmuch-show-buffer-name nil)
(make-variable-buffer-local 'notmuch-show-buffer-name) (make-variable-buffer-local 'notmuch-show-buffer-name)
(defun notmuch-show-buttonise-links (start end)
"Buttonise URLs and mail addresses between START and END.
This also turns id:\"<message id>\"-parts into buttons for
a corresponding notmuch search."
(goto-address-fontify-region start end)
(save-excursion
(goto-char start)
(while (re-search-forward "id:\\(\"?\\)[^[:space:]\"]+\\1" end t)
;; remove the overlay created by goto-address-mode
(remove-overlays (match-beginning 0) (match-end 0) 'goto-address t)
(make-text-button (match-beginning 0) (match-end 0)
'action `(lambda (arg)
(notmuch-search ,(match-string-no-properties 0)))
'follow-link t
'help-echo "Mouse-1, RET: search for this message"
'face goto-address-mail-face))))
;;;###autoload ;;;###autoload
(defun notmuch-show (thread-id &optional parent-buffer query-context buffer-name crypto-switch) (defun notmuch-show (thread-id &optional parent-buffer query-context buffer-name crypto-switch)
"Run \"notmuch show\" with the given thread ID and display results. "Run \"notmuch show\" with the given thread ID and display results.
@ -839,9 +858,8 @@ function is used. "
(notmuch-show-insert-forest (notmuch-show-insert-forest
(notmuch-query-get-threads basic-args)))) (notmuch-query-get-threads basic-args))))
;; Enable buttonisation of URLs and email addresses in the (jit-lock-register #'notmuch-show-buttonise-links)
;; buffer.
(goto-address-mode t)
;; Act on visual lines rather than logical lines. ;; Act on visual lines rather than logical lines.
(visual-line-mode t) (visual-line-mode t)