diff options
-rw-r--r-- | emacs/notmuch.el | 122 | ||||
-rw-r--r-- | test/emacs.expected-output/notmuch-hello-view-inbox | 28 | ||||
-rw-r--r-- | test/emacs.expected-output/notmuch-search-tag-inbox | 28 |
3 files changed, 108 insertions, 70 deletions
diff --git a/emacs/notmuch.el b/emacs/notmuch.el index 59337475..3d82f0d0 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -629,49 +629,87 @@ foreground and blue background." (defun notmuch-search-isearch-authors-show (overlay) (remove-from-invisibility-spec (cons (overlay-get overlay 'invisible) t))) +(defun notmuch-search-author-propertize (authors) + "Split `authors' into matching and non-matching authors and +propertize appropriately. If no boundary between authors and +non-authors is found, assume that all of the authors match." + (if (string-match "\\(.*\\)|\\(.*\\)" authors) + (concat (propertize (concat (match-string 1 authors) ",") + 'face 'notmuch-search-matching-authors) + (propertize (match-string 2 authors) + 'face 'notmuch-search-non-matching-authors)) + (propertize authors 'face 'notmuch-search-matching-authors))) + (defun notmuch-search-insert-authors (format-string authors) - (let* ((propertized-authors - ;; Need to save the match data to avoid interfering with - ;; `notmuch-search-process-filter'. - (save-match-data - ;; Authors that don't match the search query are shown in a - ;; different font. - (if (string-match "\\(.*\\)|\\(..*\\)" authors) - (concat (propertize (concat (match-string 1 authors) ",") - 'face 'notmuch-search-matching-authors) - (propertize (match-string 2 authors) - 'face 'notmuch-search-non-matching-authors)) - (propertize authors 'face 'notmuch-search-matching-authors)))) - - (formatted-sample (format format-string "")) - (formatted-authors (format format-string propertized-authors)) - visible-string invisible-string) - - ;; Determine the part of the authors that will be visible by - ;; default. - (if (> (length formatted-authors) - (length formatted-sample)) - ;; 4 is `(length "... ")'. - (let ((visible-length (- (length formatted-sample) 4))) - (setq visible-string (substring propertized-authors 0 visible-length) - invisible-string (substring propertized-authors visible-length))) - (setq visible-string formatted-authors - invisible-string nil)) - - ;; Insert both the visible and invisible author strings. - (insert visible-string) - (when invisible-string - (let ((start (point)) - (invis-spec (make-symbol "notmuch-search-authors")) - overlay) - (insert invisible-string) - ;; Using a cons-cell here causes an ellipsis to be inserted - ;; instead of the invisible text. - (add-to-invisibility-spec (cons invis-spec t)) - (setq overlay (make-overlay start (point))) - (overlay-put overlay 'invisible invis-spec) - (overlay-put overlay 'isearch-open-invisible #'notmuch-search-isearch-authors-show) - (insert " "))))) + ;; Save the match data to avoid interfering with + ;; `notmuch-search-process-filter'. + (save-match-data + (let* ((formatted-authors (format format-string authors)) + (formatted-sample (format format-string "")) + (visible-string formatted-authors) + (invisible-string "") + (padding "")) + + ;; Truncate the author string to fit the specification. + (if (> (length formatted-authors) + (length formatted-sample)) + (let ((visible-length (- (length formatted-sample) + (length "... ")))) + ;; Truncate the visible string according to the width of + ;; the display string. + (setq visible-string (substring formatted-authors 0 visible-length) + invisible-string (substring formatted-authors visible-length)) + ;; If possible, truncate the visible string at a natural + ;; break (comma or pipe), as incremental search doesn't + ;; match across the visible/invisible border. + (when (string-match "\\(.*\\)\\([,|] \\)\\([^,|]*\\)" visible-string) + ;; Second clause is destructive on `visible-string', so + ;; order is important. + (setq invisible-string (concat (match-string 3 visible-string) + invisible-string) + visible-string (concat (match-string 1 visible-string) + (match-string 2 visible-string)))) + ;; `visible-string' may be shorter than the space allowed + ;; by `format-string'. If so we must insert some padding + ;; after `invisible-string'. + (setq padding (make-string (- (length formatted-sample) + (length visible-string) + (length "...")) + ? )))) + + ;; Use different faces to show matching and non-matching authors. + (if (string-match "\\(.*\\)|\\(.*\\)" visible-string) + ;; The visible string contains both matching and + ;; non-matching authors. + (setq visible-string (notmuch-search-author-propertize visible-string) + ;; The invisible string must contain only non-matching + ;; authors, as the visible-string contains both. + invisible-string (propertize invisible-string + 'face 'notmuch-search-non-matching-authors)) + ;; The visible string contains only matching authors. + (setq visible-string (propertize visible-string + 'face 'notmuch-search-matching-authors) + ;; The invisible string may contain both matching and + ;; non-matching authors. + invisible-string (notmuch-search-author-propertize invisible-string))) + + ;; If there is any invisible text, add it as a tooltip to the + ;; visible text. + (when (not (string= invisible-string "")) + (setq visible-string (propertize visible-string 'help-echo (concat "..." invisible-string)))) + + ;; Insert the visible and, if present, invisible author strings. + (insert visible-string) + (when (not (string= invisible-string "")) + (let ((start (point)) + (invis-spec (make-symbol "notmuch-search-authors")) + overlay) + (insert invisible-string) + (add-to-invisibility-spec (cons invis-spec t)) + (setq overlay (make-overlay start (point))) + (overlay-put overlay 'invisible invis-spec) + (overlay-put overlay 'isearch-open-invisible #'notmuch-search-isearch-authors-show))) + (insert padding)))) (defun notmuch-search-insert-field (field date count authors subject tags) (cond diff --git a/test/emacs.expected-output/notmuch-hello-view-inbox b/test/emacs.expected-output/notmuch-hello-view-inbox index 3ba2b291..924f7ef9 100644 --- a/test/emacs.expected-output/notmuch-hello-view-inbox +++ b/test/emacs.expected-output/notmuch-hello-view-inbox @@ -1,23 +1,23 @@ - 2009-11-17 [5/5] Carl Worth, Keith Packard, Mikhail Gusarov [notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox unread) - 2009-11-17 [7/7] Carl Worth, Lars Kellogg-Stedman, Keith Packard, Mikhail Gusarov [notmuch] Working with Maildir storage? (inbox unread) - 2009-11-17 [2/2] Carl Worth, Alex Botero-Lowry [notmuch] preliminary FreeBSD support (attachment inbox unread) + 2009-11-17 [5/5] Carl Worth, Keith Packard, Mikhail Gusarov [notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox unread) + 2009-11-17 [7/7] Carl Worth, Lars Kellogg-Stedman, Keith Packard, Mikhail Gusarov [notmuch] Working with Maildir storage? (inbox unread) + 2009-11-17 [2/2] Carl Worth, Alex Botero-Lowry [notmuch] preliminary FreeBSD support (attachment inbox unread) 2009-11-17 [1/1] Mikhail Gusarov [notmuch] [PATCH] Handle rename of message file (inbox unread) - 2009-11-17 [2/2] Carl Worth, Keith Packard [notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox unread) - 2009-11-17 [2/2] Carl Worth, Jan Janak [notmuch] [PATCH] Older versions of install do not support -C. (inbox unread) - 2009-11-17 [3/3] Carl Worth, Jan Janak [notmuch] What a great idea! (inbox unread) - 2009-11-17 [3/3] Carl Worth, Keith Packard, Israel Herraiz [notmuch] New to the list (inbox unread) - 2009-11-17 [3/3] Carl Worth, Keith Packard, Adrian Perez de Castro [notmuch] Introducing myself (inbox unread) - 2009-11-17 [3/3] Carl Worth, Keith Packard, Aron Griffis [notmuch] archive (inbox unread) - 2009-11-17 [2/2] Carl Worth, Ingmar Vanhassel [notmuch] [PATCH] Typsos (inbox unread) - 2009-11-18 [2/2] Carl Worth, Alex Botero-Lowry [notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (attachment inbox unread) + 2009-11-17 [2/2] Carl Worth, Keith Packard [notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox unread) + 2009-11-17 [2/2] Carl Worth, Jan Janak [notmuch] [PATCH] Older versions of install do not support -C. (inbox unread) + 2009-11-17 [3/3] Carl Worth, Jan Janak [notmuch] What a great idea! (inbox unread) + 2009-11-17 [3/3] Carl Worth, Keith Packard, Israel Herraiz [notmuch] New to the list (inbox unread) + 2009-11-17 [3/3] Carl Worth, Keith Packard, Adrian Perez de Castro [notmuch] Introducing myself (inbox unread) + 2009-11-17 [3/3] Carl Worth, Keith Packard, Aron Griffis [notmuch] archive (inbox unread) + 2009-11-17 [2/2] Carl Worth, Ingmar Vanhassel [notmuch] [PATCH] Typsos (inbox unread) + 2009-11-18 [2/2] Carl Worth, Alex Botero-Lowry [notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (attachment inbox unread) 2009-11-18 [2/2] Lars Kellogg-Stedman [notmuch] "notmuch help" outputs to stderr? (attachment inbox unread) 2009-11-18 [1/1] Stewart Smith [notmuch] [PATCH] Fix linking with gcc to use g++ to link in C++ libs. (inbox unread) 2009-11-18 [1/1] Stewart Smith [notmuch] [PATCH 2/2] Read mail directory in inode number order (inbox unread) 2009-11-18 [1/1] Stewart Smith [notmuch] [PATCH] count_files: sort directory in inode order before statting (inbox unread) - 2009-11-18 [4/4] Alexander Botero-Lowry, Jjgod Jiang [notmuch] Mac OS X/Darwin compatibility issues (inbox unread) + 2009-11-18 [4/4] Alexander Botero-Lowry, Jjgod Jiang [notmuch] Mac OS X/Darwin compatibility issues (inbox unread) 2009-11-18 [1/1] Jan Janak [notmuch] [PATCH] notmuch new: Support for conversion of spool subdirectories into tags (inbox unread) 2009-11-18 [1/1] Rolland Santimano [notmuch] Link to mailing list archives ? (inbox unread) - 2009-11-18 [1/1] Alexander Botero-Lowry [notmuch] request for pull (inbox unread) - 2009-11-18 [2/2] Alexander Botero-Lowry, Keith Packard [notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox unread) + 2009-11-18 [1/1] Alexander Botero-Lowry [notmuch] request for pull (inbox unread) + 2009-11-18 [2/2] Alexander Botero-Lowry, Keith Packard [notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox unread) 2009-11-18 [1/1] Chris Wilson [notmuch] [PATCH 1/2] Makefile: evaluate pkg-config once (inbox unread) End of search results. diff --git a/test/emacs.expected-output/notmuch-search-tag-inbox b/test/emacs.expected-output/notmuch-search-tag-inbox index 146f63a6..15a0d2b9 100644 --- a/test/emacs.expected-output/notmuch-search-tag-inbox +++ b/test/emacs.expected-output/notmuch-search-tag-inbox @@ -1,17 +1,17 @@ 2009-11-18 [1/1] Chris Wilson [notmuch] [PATCH 1/2] Makefile: evaluate pkg-config once (inbox unread) - 2009-11-18 [2/2] Carl Worth, Alex Botero-Lowry [notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (attachment inbox unread) - 2009-11-18 [2/2] Carl Worth, Ingmar Vanhassel [notmuch] [PATCH] Typsos (inbox unread) - 2009-11-18 [3/3] Carl Worth, Keith Packard, Adrian Perez de Castro [notmuch] Introducing myself (inbox unread) - 2009-11-18 [3/3] Carl Worth, Keith Packard, Israel Herraiz [notmuch] New to the list (inbox unread) - 2009-11-18 [3/3] Carl Worth, Jan Janak [notmuch] What a great idea! (inbox unread) - 2009-11-18 [2/2] Carl Worth, Jan Janak [notmuch] [PATCH] Older versions of install do not support -C. (inbox unread) - 2009-11-18 [3/3] Carl Worth, Keith Packard, Aron Griffis [notmuch] archive (inbox unread) - 2009-11-18 [2/2] Carl Worth, Keith Packard [notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox unread) - 2009-11-18 [7/7] Carl Worth, Lars Kellogg-Stedman, Keith Packard, Mikhail Gusarov [notmuch] Working with Maildir storage? (inbox unread) - 2009-11-18 [5/5] Carl Worth, Keith Packard, Mikhail Gusarov [notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox unread) - 2009-11-18 [2/2] Alexander Botero-Lowry, Keith Packard [notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox unread) - 2009-11-18 [1/1] Alexander Botero-Lowry [notmuch] request for pull (inbox unread) - 2009-11-18 [4/4] Alexander Botero-Lowry, Jjgod Jiang [notmuch] Mac OS X/Darwin compatibility issues (inbox unread) + 2009-11-18 [2/2] Carl Worth, Alex Botero-Lowry [notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (attachment inbox unread) + 2009-11-18 [2/2] Carl Worth, Ingmar Vanhassel [notmuch] [PATCH] Typsos (inbox unread) + 2009-11-18 [3/3] Carl Worth, Keith Packard, Adrian Perez de Castro [notmuch] Introducing myself (inbox unread) + 2009-11-18 [3/3] Carl Worth, Keith Packard, Israel Herraiz [notmuch] New to the list (inbox unread) + 2009-11-18 [3/3] Carl Worth, Jan Janak [notmuch] What a great idea! (inbox unread) + 2009-11-18 [2/2] Carl Worth, Jan Janak [notmuch] [PATCH] Older versions of install do not support -C. (inbox unread) + 2009-11-18 [3/3] Carl Worth, Keith Packard, Aron Griffis [notmuch] archive (inbox unread) + 2009-11-18 [2/2] Carl Worth, Keith Packard [notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox unread) + 2009-11-18 [7/7] Carl Worth, Lars Kellogg-Stedman, Keith Packard, Mikhail Gusarov [notmuch] Working with Maildir storage? (inbox unread) + 2009-11-18 [5/5] Carl Worth, Keith Packard, Mikhail Gusarov [notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox unread) + 2009-11-18 [2/2] Alexander Botero-Lowry, Keith Packard [notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox unread) + 2009-11-18 [1/1] Alexander Botero-Lowry [notmuch] request for pull (inbox unread) + 2009-11-18 [4/4] Alexander Botero-Lowry, Jjgod Jiang [notmuch] Mac OS X/Darwin compatibility issues (inbox unread) 2009-11-18 [1/1] Rolland Santimano [notmuch] Link to mailing list archives ? (inbox unread) 2009-11-18 [1/1] Jan Janak [notmuch] [PATCH] notmuch new: Support for conversion of spool subdirectories into tags (inbox unread) 2009-11-18 [1/1] Stewart Smith [notmuch] [PATCH] count_files: sort directory in inode order before statting (inbox unread) @@ -19,5 +19,5 @@ 2009-11-18 [1/1] Stewart Smith [notmuch] [PATCH] Fix linking with gcc to use g++ to link in C++ libs. (inbox unread) 2009-11-18 [2/2] Lars Kellogg-Stedman [notmuch] "notmuch help" outputs to stderr? (attachment inbox unread) 2009-11-17 [1/1] Mikhail Gusarov [notmuch] [PATCH] Handle rename of message file (inbox unread) - 2009-11-17 [2/2] Carl Worth, Alex Botero-Lowry [notmuch] preliminary FreeBSD support (attachment inbox unread) + 2009-11-17 [2/2] Carl Worth, Alex Botero-Lowry [notmuch] preliminary FreeBSD support (attachment inbox unread) End of search results. |