This adds an option to edit the current query. It is bound to prefix-key f as it is a sort of inverse operation to filtering. --- rlb asked for the option to modify the existing search query on irc. This implements that for the search view. Best wishes Mark emacs/notmuch.el | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/emacs/notmuch.el b/emacs/notmuch.el index 6c0bc1b..b4408f1 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -848,7 +848,7 @@ See `notmuch-tag' for information on the format of TAG-CHANGES." (concat "*notmuch-search-" query "*")) ))) -(defun notmuch-read-query (prompt) +(defun notmuch-read-query (prompt &optional initial-contents) "Read a notmuch-query from the minibuffer with completion. PROMPT is the string to prompt with." @@ -876,7 +876,7 @@ PROMPT is the string to prompt with." ;; this was simpler than convincing completing-read to accept spaces: (define-key keymap (kbd "TAB") 'minibuffer-complete) (let ((history-delete-duplicates t)) - (read-from-minibuffer prompt nil keymap nil + (read-from-minibuffer prompt initial-contents keymap nil 'notmuch-search-history nil nil))))) ;;;###autoload @@ -963,18 +963,33 @@ default sort order is defined by `notmuch-search-oldest-first'." (set 'notmuch-search-oldest-first (not notmuch-search-oldest-first)) (notmuch-search-refresh-view)) -(defun notmuch-search-filter (query) +(put 'notmuch-search-filter 'notmuch-doc + "Filter the current search results based on an additional query string.") +(put 'notmuch-search-filter 'notmuch-prefix-doc + "Edit the current search query.") +(defun notmuch-search-filter (modify query) "Filter the current search results based on an additional query string. Runs a new search matching only messages that match both the -current search results AND the additional query string provided." - (interactive (list (notmuch-read-query "Filter search: "))) - (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))) +current search results AND the additional query string provided. + +If called with a prefix-arg then present the user with the +existing query string to allow the user to edit it." + (interactive (let ((query-string (if current-prefix-arg + "Modify Search: " + "Filter Search: ")) + (initial-contents (if current-prefix-arg + notmuch-search-query-string + nil))) + (list current-prefix-arg (notmuch-read-query query-string initial-contents)))) + (if modify + (notmuch-search 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. -- 1.7.10.4