X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=emacs%2Fnotmuch.el;h=4bc429461c599e102111d8bfee8cbae36ea3271a;hp=9ff376786c476cd17ea8783fbe8a4e1f58baf3cc;hb=84767fd5823b3b421be83000255951316e85be8c;hpb=fbec989fe3272d6eff038369587be076347b96f0 diff --git a/emacs/notmuch.el b/emacs/notmuch.el index 9ff37678..4bc42946 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -411,9 +411,19 @@ Complete list of currently available key bindings: (defun notmuch-search-show-thread () "Display the currently selected thread." (interactive) - (let ((thread-id (notmuch-search-find-thread-id))) + (let ((thread-id (notmuch-search-find-thread-id)) + (subject (notmuch-search-find-subject)) + buffer-name) + (when (string-match "^[ \t]*$" subject) + (setq subject "[No Subject]")) + (setq buffer-name (concat "*" + (truncate-string-to-width subject 32 nil nil t) + "*")) (if (> (length thread-id) 0) - (notmuch-show thread-id (current-buffer) notmuch-search-query-string) + (notmuch-show thread-id + (current-buffer) + notmuch-search-query-string + buffer-name) (error "End of search results")))) (defun notmuch-search-reply-to-thread () @@ -516,6 +526,35 @@ This function advances the next thread when finished." notmuch-search-target-line) (goto-line notmuch-search-target-line))))))) +(defcustom notmuch-search-line-faces nil + "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 :key-type (string) :value-type (list)) + :group 'notmuch) + +(defun notmuch-search-color-line (start end line-tag-list) + "Colorize lines in notmuch-show 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)) @@ -534,13 +573,15 @@ 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 notmuch-search-authors-width) (set 'authors (concat (substring authors 0 (- notmuch-search-authors-width 3)) "..."))) (goto-char (point-max)) (let ((beg (point-marker)) (format-string (format "%%s %%-7s %%-%ds %%s (%%s)\n" notmuch-search-authors-width))) (insert (format format-string 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)