emacs: Fix search filtering of a global search ("*")
authorCarl Worth <cworth@cworth.org>
Fri, 16 Apr 2010 04:22:57 +0000 (21:22 -0700)
committerCarl Worth <cworth@cworth.org>
Fri, 16 Apr 2010 04:25:45 +0000 (21:25 -0700)
With the recent addition of "*" being a special case for a search
matching all messages, we have to take care when doing a filter
operation. In this case it's not legal to simply append and get:

* and <some-new-search-terms>

Instead we carefully construct a new search string of only:

<some-new-search-terms>

This could all be avoided if we had a parser that could understand
"*" with the meaning we want.

emacs/notmuch.el

index be09f424a953c0686f552b7dd012ef5747b3d01a..8b153cc037e50bb21298d32ad64e550d701334cb 100644 (file)
@@ -773,8 +773,12 @@ search."
 Runs a new search matching only messages that match both the
 current search results AND the additional query string provided."
   (interactive "sFilter search: ")
-  (let ((grouped-query (if (string-match-p notmuch-search-disjunctive-regexp query) (concat "( " query " )") query)))
-    (notmuch-search (concat notmuch-search-query-string " and " grouped-query) notmuch-search-oldest-first)))
+  (let ((grouped-query (if (string-match-p notmuch-search-disjunctive-regexp query)
+                          (concat "( " query " )")
+                        query)))
+    (notmuch-search (if (string= notmuch-search-query-string "*")
+                       grouped-query
+                     (concat notmuch-search-query-string " and " grouped-query)) notmuch-search-oldest-first)))
 
 (defun notmuch-search-filter-by-tag (tag)
   "Filter the current search results based on a single tag.