emacs: Display non-matching authors with a different face.

In search mode some messages don't match the search criteria. Show
their authors names with a different face - generally darker than
those that do match.
This commit is contained in:
David Edmondson 2010-04-29 07:52:22 +01:00 committed by Carl Worth
parent f6ce820a21
commit 106f9862d1

View file

@ -297,6 +297,17 @@ For a mouse binding, return nil."
"Notmuch search mode face used to highligh tags." "Notmuch search mode face used to highligh tags."
:group 'notmuch) :group 'notmuch)
(defface notmuch-search-non-matching-authors
'((((class color)
(background dark))
(:foreground "grey30"))
(((class color)
(background light))
(:foreground "grey60"))
(t (:italic t)))
"Face used in search mode for authors not matching the query."
:group 'notmuch)
;;;###autoload ;;;###autoload
(defun notmuch-search-mode () (defun notmuch-search-mode ()
"Major mode displaying results of a notmuch search. "Major mode displaying results of a notmuch search.
@ -576,6 +587,23 @@ matching will be applied."
(t (t
(setq tags-faces (cdr tags-faces))))))))) (setq tags-faces (cdr tags-faces)))))))))
(defun notmuch-search-insert-authors (format-string authors)
(insert (let* ((formatted-sample (format format-string ""))
(formatted-authors (format format-string authors))
(truncated-string
(if (> (length formatted-authors)
(length formatted-sample))
(concat (substring authors 0 (- (length formatted-sample) 4)) "... ")
formatted-authors)))
;; Need to save the match data to avoid interfering with
;; `notmuch-search-process-filter'.
(save-match-data
(if (string-match "\\(.*\\)|\\(..*\\)" truncated-string)
(concat (match-string 1 truncated-string) ","
(propertize (match-string 2 truncated-string)
'face 'notmuch-search-non-matching-authors))
truncated-string)))))
(defun notmuch-search-insert-field (field date count authors subject tags) (defun notmuch-search-insert-field (field date count authors subject tags)
(cond (cond
((string-equal field "date") ((string-equal field "date")
@ -583,13 +611,7 @@ matching will be applied."
((string-equal field "count") ((string-equal field "count")
(insert (format (cdr (assoc field notmuch-search-result-format)) count))) (insert (format (cdr (assoc field notmuch-search-result-format)) count)))
((string-equal field "authors") ((string-equal field "authors")
(insert (let* ((format-string (cdr (assoc field notmuch-search-result-format))) (notmuch-search-insert-authors (cdr (assoc field notmuch-search-result-format)) authors))
(formatted-sample (format format-string ""))
(formatted-authors (format format-string authors)))
(if (> (length formatted-authors)
(length formatted-sample))
(concat (substring authors 0 (- (length formatted-sample) 4)) "... ")
formatted-authors))))
((string-equal field "subject") ((string-equal field "subject")
(insert (format (cdr (assoc field notmuch-search-result-format)) subject))) (insert (format (cdr (assoc field notmuch-search-result-format)) subject)))
((string-equal field "tags") ((string-equal field "tags")