aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--emacs/notmuch.el122
-rw-r--r--test/emacs.expected-output/notmuch-hello-view-inbox28
-rw-r--r--test/emacs.expected-output/notmuch-search-tag-inbox28
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.