emacs: hello: use the saved-search helper functions

This uses the helper functions: the saved searches format has not
changed yet but backwards compatibility means everything still works.
This commit is contained in:
Mark Walters 2014-04-06 06:44:46 +01:00 committed by David Bremner
parent 4767e89bc7
commit 5e26d14536
2 changed files with 25 additions and 29 deletions

View file

@ -318,7 +318,7 @@ return that."
(setq notmuch-saved-searches (setq notmuch-saved-searches
(loop for elem in notmuch-saved-searches (loop for elem in notmuch-saved-searches
if (not (equal name if (not (equal name
(car elem))) (notmuch-saved-search-get elem :name)))
collect elem)) collect elem))
;; Add the new one. ;; Add the new one.
(customize-save-variable 'notmuch-saved-searches (customize-save-variable 'notmuch-saved-searches
@ -338,7 +338,7 @@ return that."
(defun notmuch-hello-longest-label (searches-alist) (defun notmuch-hello-longest-label (searches-alist)
(or (loop for elem in searches-alist (or (loop for elem in searches-alist
maximize (length (car elem))) maximize (length (notmuch-saved-search-get elem :name)))
0)) 0))
(defun notmuch-hello-reflect-generate-row (ncols nrows row list) (defun notmuch-hello-reflect-generate-row (ncols nrows row list)
@ -417,13 +417,12 @@ Otherwise, FILTER is ignored.
(concat "(" query ") and (" filter ")")) (concat "(" query ") and (" filter ")"))
(t query))) (t query)))
(defun notmuch-hello-query-counts (query-alist &rest options) (defun notmuch-hello-query-counts (query-list &rest options)
"Compute list of counts of matched messages from QUERY-ALIST. "Compute list of counts of matched messages from QUERY-LIST.
QUERY-ALIST must be a list containing elements of the form (NAME . QUERY) QUERY-LIST must be a list of saved-searches. Ideally each of
or (NAME QUERY COUNT-QUERY). If the latter form is used, these is a plist but other options are available for backwards
COUNT-QUERY specifies an alternate query to be used to generate compatibility: see `notmuch-saved-searches' for details.
the count for the associated query.
The result is the list of elements of the form (NAME QUERY COUNT). The result is the list of elements of the form (NAME QUERY COUNT).
@ -431,11 +430,9 @@ The values :show-empty-searches, :filter and :filter-count from
options will be handled as specified for options will be handled as specified for
`notmuch-hello-insert-searches'." `notmuch-hello-insert-searches'."
(with-temp-buffer (with-temp-buffer
(dolist (elem query-alist nil) (dolist (elem query-list nil)
(let ((count-query (if (consp (cdr elem)) (let ((count-query (or (notmuch-saved-search-get elem :count-query)
;; do we have a different query for the message count? (notmuch-saved-search-get elem :query))))
(third elem)
(cdr elem))))
(insert (insert
(replace-regexp-in-string (replace-regexp-in-string
"\n" " " "\n" " "
@ -457,18 +454,15 @@ the CLI and emacs interface."))
#'identity #'identity
(mapcar (mapcar
(lambda (elem) (lambda (elem)
(let ((name (car elem)) (let ((name (notmuch-saved-search-get elem :name))
(search-query (if (consp (cdr elem)) (search-query (notmuch-saved-search-get elem :query))
;; do we have a different query for the message count?
(second elem)
(cdr elem)))
(message-count (prog1 (read (current-buffer)) (message-count (prog1 (read (current-buffer))
(forward-line 1)))) (forward-line 1))))
(and (or (plist-get options :show-empty-searches) (> message-count 0)) (and (or (plist-get options :show-empty-searches) (> message-count 0))
(list name (notmuch-hello-filtered-query (list name (notmuch-hello-filtered-query
search-query (plist-get options :filter)) search-query (plist-get options :filter))
message-count)))) message-count))))
query-alist)))) query-list))))
(defun notmuch-hello-insert-buttons (searches) (defun notmuch-hello-insert-buttons (searches)
"Insert buttons for SEARCHES. "Insert buttons for SEARCHES.
@ -738,13 +732,15 @@ Complete list of currently available key bindings:
(indent-rigidly start (point) notmuch-hello-indent)) (indent-rigidly start (point) notmuch-hello-indent))
nil)) nil))
(defun notmuch-hello-insert-searches (title query-alist &rest options) (defun notmuch-hello-insert-searches (title query-list &rest options)
"Insert a section with TITLE showing a list of buttons made from QUERY-ALIST. "Insert a section with TITLE showing a list of buttons made from QUERY-LIST.
QUERY-ALIST must be a list containing elements of the form (NAME . QUERY) QUERY-LIST should ideally be a plist but for backwards
or (NAME QUERY COUNT-QUERY). If the latter form is used, compatibility other forms are also accepted (see
COUNT-QUERY specifies an alternate query to be used to generate `notmuch-saved-searches' for details). The plist should
the count for the associated item. contain keys :name and :query; if :count-query is also present
then it specifies an alternate query to be used to generate the
count for the associated search.
Supports the following entries in OPTIONS as a plist: Supports the following entries in OPTIONS as a plist:
:initially-hidden - if non-nil, section will be hidden on startup :initially-hidden - if non-nil, section will be hidden on startup
@ -778,7 +774,7 @@ Supports the following entries in OPTIONS as a plist:
"hide")) "hide"))
(widget-insert "\n") (widget-insert "\n")
(when (not is-hidden) (when (not is-hidden)
(let ((searches (apply 'notmuch-hello-query-counts query-alist options))) (let ((searches (apply 'notmuch-hello-query-counts query-list options)))
(when (or (not (plist-get options :hide-if-empty)) (when (or (not (plist-get options :hide-if-empty))
searches) searches)
(widget-insert "\n") (widget-insert "\n")

View file

@ -827,14 +827,14 @@ See `notmuch-tag' for information on the format of TAG-CHANGES."
(let (longest (let (longest
(longest-length 0)) (longest-length 0))
(loop for tuple in notmuch-saved-searches (loop for tuple in notmuch-saved-searches
if (let ((quoted-query (regexp-quote (cdr tuple)))) if (let ((quoted-query (regexp-quote (notmuch-saved-search-get tuple :query))))
(and (string-match (concat "^" quoted-query) query) (and (string-match (concat "^" quoted-query) query)
(> (length (match-string 0 query)) (> (length (match-string 0 query))
longest-length))) longest-length)))
do (setq longest tuple)) do (setq longest tuple))
longest)) longest))
(saved-search-name (car saved-search)) (saved-search-name (notmuch-saved-search-get saved-search :name))
(saved-search-query (cdr saved-search))) (saved-search-query (notmuch-saved-search-get saved-search :query)))
(cond ((and saved-search (equal saved-search-query query)) (cond ((and saved-search (equal saved-search-query query))
;; Query is the same as saved search (ignoring case) ;; Query is the same as saved search (ignoring case)
(concat "*notmuch-saved-search-" saved-search-name "*")) (concat "*notmuch-saved-search-" saved-search-name "*"))