]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch.el
emacs: Allow tuning of the tag/saved search layout.
[notmuch] / emacs / notmuch.el
index 57e11400a526cf4b81433430d1ce0f65245f989d..0da7ab982fa32981a9a410e4609be5412d10cb17 100644 (file)
@@ -285,6 +285,38 @@ For a mouse binding, return nil."
  "Face for the single-line message summary in notmuch-show-mode."
  :group 'notmuch)
 
+(defface notmuch-search-date
+  '((t :inherit default))
+  "Face used in search mode for dates."
+  :group 'notmuch)
+
+(defface notmuch-search-count
+  '((t :inherit default))
+  "Face used in search mode for the count matching the query."
+  :group 'notmuch)
+
+(defface notmuch-search-subject
+  '((t :inherit default))
+  "Face used in search mode for subjects."
+  :group 'notmuch)
+
+(defface notmuch-search-matching-authors
+  '((t :inherit default))
+  "Face used in search mode for authors matching the query."
+  :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)
+
 (defface notmuch-tag-face
   '((((class color)
       (background dark))
@@ -294,7 +326,7 @@ For a mouse binding, return nil."
      (:foreground "navy blue" :bold t))
     (t
      (:bold t)))
-  "Notmuch search mode face used to highligh tags."
+  "Face used in search mode face for tags."
   :group 'notmuch)
 
 ;;;###autoload
@@ -427,7 +459,7 @@ and will also appear in a buffer named \"*Notmuch errors*\"."
       (let ((end (point)))
        (delete-region beg end)
        (insert (propertize (mapconcat  'identity tags " ")
-                           'font-lock-face 'notmuch-tag-face))))))
+                           'face 'notmuch-tag-face))))))
 
 (defun notmuch-search-get-tags ()
   (save-excursion
@@ -576,22 +608,39 @@ matching will be applied."
                  (t
                   (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 (propertize (concat (match-string 1 truncated-string) ",")
+                                     'face 'notmuch-search-matching-authors)
+                         (propertize (match-string 2 truncated-string)
+                                     'face 'notmuch-search-non-matching-authors))
+               (propertize truncated-string 'face 'notmuch-search-matching-authors))))))
+
 (defun notmuch-search-insert-field (field date count authors subject tags)
   (cond
    ((string-equal field "date")
-    (insert (format (cdr (assoc field notmuch-search-result-format)) date)))
+    (insert (propertize (format (cdr (assoc field notmuch-search-result-format)) date)
+                       'face 'notmuch-search-date)))
    ((string-equal field "count")
-    (insert (format (cdr (assoc field notmuch-search-result-format)) count)))
-   ((string-equal field "authors")
-    (insert (let* ((format-string (cdr (assoc field notmuch-search-result-format)))
-                  (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))))
+    (insert (propertize (format (cdr (assoc field notmuch-search-result-format)) count)
+                       'face 'notmuch-search-count)))
    ((string-equal field "subject")
-    (insert (format (cdr (assoc field notmuch-search-result-format)) subject)))
+    (insert (propertize (format (cdr (assoc field notmuch-search-result-format)) subject)
+                       'face 'notmuch-search-subject)))
+
+   ((string-equal field "authors")
+    (notmuch-search-insert-authors (cdr (assoc field notmuch-search-result-format)) authors))
+
    ((string-equal field "tags")
     (insert (concat "(" (propertize tags 'font-lock-face 'notmuch-tag-face) ")")))))