]> rtime.felk.cvut.cz Git - notmuch.git/blobdiff - emacs/notmuch.el
emacs: Adjust comment to avoid confusing font-lock.
[notmuch.git] / emacs / notmuch.el
index ba9bbdad7814407e1baf41c1d0b3d77c736fc522..7c9c028e294bd74f092b5abdd7dd8f600a9ffae0 100644 (file)
@@ -56,6 +56,7 @@
 (require 'notmuch-mua)
 (require 'notmuch-hello)
 (require 'notmuch-maildir-fcc)
+(require 'notmuch-message)
 
 (defcustom notmuch-search-result-format
   `(("date" . "%s ")
@@ -284,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))
@@ -293,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
@@ -426,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
@@ -550,10 +583,10 @@ This function advances the next thread when finished."
   "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):
+ (the following text would be placed in your ~/.emacs file):
 
-(setq notmuch-search-line-faces '((\"delete\" . '(:foreground \"red\"))
-                                 (\"unread\" . '(:foreground \"green\"))))
+ (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."
@@ -575,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) ")")))))
 
@@ -663,9 +713,9 @@ characters as well as `_.+-'.
 (defun notmuch-search-buffer-title (query)
   "Returns the title for a buffer with notmuch search results."
   (let* ((saved-search (rassoc-if (lambda (key)
-                                   (string-match (concat "^" (regexp-quote key) "$")
+                                   (string-match (concat "^" (regexp-quote key))
                                                  query))
-                                 (notmuch-saved-searches)))
+                                 (reverse (notmuch-saved-searches))))
         (saved-search-name (car saved-search))
         (saved-search-query (cdr saved-search)))
     (cond ((and saved-search (equal saved-search-query query))