Arbitrary font faces can be specified for given thread tags. By default, no coloring is applied. To specify coloring, place something like this in your .emacs:
(setq notmuch-search-line-faces '(("delete" . (:foreground "red")) ("unread" . (:foreground "green")))) Order matters: line faces listed first will take precedence (in the example above, a thread tagged both "delete" and "unread" will be colored red, since the "delete" face is listed before the "unread"). --- notmuch.el | 34 +++++++++++++++++++++++++++++++++- 1 files changed, 33 insertions(+), 1 deletions(-) diff --git a/notmuch.el b/notmuch.el index a21c6a6..6c42b37 100644 --- a/notmuch.el +++ b/notmuch.el @@ -1203,6 +1203,36 @@ This function advances the next thread when finished." (insert (format " (process returned %d)" exit-status))) (insert "\n")))))))))) +(defcustom notmuch-search-line-faces + '(("delete" . (:foreground "DarkGrey"))) + "Tag/face mapping for line highlighting in notmuch-search. + +Here is an example of how to color search results based on tags. +(the following text would be placed in your ~/.emacs file): + +(setq notmuch-search-line-faces '((\"delete\" . (:foreground \"red\")) + (\"unread\" . (:foreground \"green\")))) + +Order matters: for lines with multiple tags, the the first +matching will be applied." + :type '(alist :value-type (string face)) + :group 'notmuch) + +(defun notmuch-search-color-line (start end line-tag-list) + "Colorize lines in notmuch-search based on tags" + (if notmuch-search-line-faces + (let ((overlay (make-overlay start end)) + (tags-faces (copy-alist notmuch-search-line-faces))) + (while tags-faces + (let* ((tag-face (car tags-faces)) + (tag (car tag-face)) + (face (cdr tag-face))) + (cond ((member tag line-tag-list) + (overlay-put overlay 'face face) + (setq tags-faces nil)) + (t + (setq tags-faces (cdr tags-faces))))))))) + (defun notmuch-search-process-filter (proc string) "Process and filter the output of \"notmuch search\"" (let ((buffer (process-buffer proc))) @@ -1220,12 +1250,14 @@ This function advances the next thread when finished." (authors (match-string 4 string)) (authors-length (length authors)) (subject (match-string 5 string)) - (tags (match-string 6 string))) + (tags (match-string 6 string)) + (tag-list (if tags (save-match-data (split-string tags))))) (if (> authors-length 40) (set 'authors (concat (substring authors 0 (- 40 3)) "..."))) (goto-char (point-max)) (let ((beg (point-marker))) (insert (format "%s %-7s %-40s %s (%s)\n" date count authors subject tags)) + (notmuch-search-color-line beg (point-marker) tag-list) (put-text-property beg (point-marker) 'notmuch-search-thread-id thread-id) (put-text-property beg (point-marker) 'notmuch-search-authors authors) (put-text-property beg (point-marker) 'notmuch-search-subject subject)) -- 1.6.5