Quoth Mark Walters on Apr 05 at 10:24 pm:
> This uses the helper functions: the saved searches format has not
> changed yet but backwards compatibility means everything still works.
> ---
>  emacs/notmuch-hello.el |   48 
> ++++++++++++++++++++++--------------------------
>  emacs/notmuch.el       |    6 +++---
>  2 files changed, 25 insertions(+), 29 deletions(-)
> 
> diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
> index 0b9ed16..733208b 100644
> --- a/emacs/notmuch-hello.el
> +++ b/emacs/notmuch-hello.el
> @@ -319,7 +319,7 @@ (defun notmuch-hello-add-saved-search (widget)
>      (setq notmuch-saved-searches
>         (loop for elem in notmuch-saved-searches
>               if (not (equal name
> -                            (car elem)))
> +                            (notmuch-saved-search-get elem :name)))
>               collect elem))
>      ;; Add the new one.
>      (customize-save-variable 'notmuch-saved-searches
> @@ -339,7 +339,7 @@ (defun notmuch-hello-delete-search-from-history (widget)
>  
>  (defun notmuch-hello-longest-label (searches-alist)
>    (or (loop for elem in searches-alist
> -         maximize (length (car elem)))
> +         maximize (length (notmuch-saved-search-get elem :name)))
>        0))
>  
>  (defun notmuch-hello-reflect-generate-row (ncols nrows row list)
> @@ -418,13 +418,12 @@ (defun notmuch-hello-filtered-query (query filter)
>      (concat "(" query ") and (" filter ")"))
>     (t query)))
>  
> -(defun notmuch-hello-query-counts (query-alist &rest options)
> -  "Compute list of counts of matched messages from QUERY-ALIST.
> +(defun notmuch-hello-query-counts (query-list &rest options)
> +  "Compute list of counts of matched messages from QUERY-LIST.
>  
> -QUERY-ALIST must be a list containing elements of the form (NAME . QUERY)
> -or (NAME QUERY COUNT-QUERY). If the latter form is used,
> -COUNT-QUERY specifies an alternate query to be used to generate
> -the count for the associated query.
> +QUERY-LIST must be a list of saved-searches. Ideally each of
> +these is a plist but other options are available for backwards
> +compatibility: see notmuch-saved-search-get for details.

s/:/./  Also `'s around notmuch-saved-search-get.

Actually, the accepted formats (including the understood keys in plist
form) should be documented in `notmuch-saved-searches' and this
information should be cited elsewhere and not duplicated.

>  
>  The result is the list of elements of the form (NAME QUERY COUNT).
>  
> @@ -432,11 +431,9 @@ (defun notmuch-hello-query-counts (query-alist &rest 
> options)
>  options will be handled as specified for
>  `notmuch-hello-insert-searches'."
>    (with-temp-buffer
> -    (dolist (elem query-alist nil)
> -      (let ((count-query (if (consp (cdr elem))
> -                          ;; do we have a different query for the message 
> count?
> -                          (third elem)
> -                        (cdr elem))))
> +    (dolist (elem query-list nil)
> +      (let ((count-query (or (notmuch-saved-search-get elem :count-query)
> +                          (notmuch-saved-search-get elem :query))))
>       (insert
>        (replace-regexp-in-string
>         "\n" " "
> @@ -458,18 +455,15 @@ (defun notmuch-hello-query-counts (query-alist &rest 
> options)
>       #'identity
>       (mapcar
>        (lambda (elem)
> -     (let ((name (car elem))
> -           (search-query (if (consp (cdr elem))
> -                              ;; do we have a different query for the 
> message count?
> -                              (second elem)
> -                           (cdr elem)))
> +     (let ((name (notmuch-saved-search-get elem :name))
> +           (search-query (notmuch-saved-search-get elem :query))
>             (message-count (prog1 (read (current-buffer))
>                               (forward-line 1))))
>         (and (or (plist-get options :show-empty-searches) (> message-count 0))
>              (list name (notmuch-hello-filtered-query
>                          search-query (plist-get options :filter))
>                    message-count))))
> -      query-alist))))
> +      query-list))))
>  
>  (defun notmuch-hello-insert-buttons (searches)
>    "Insert buttons for SEARCHES.
> @@ -728,13 +722,15 @@ (defun notmuch-hello-insert-recent-searches ()
>        (indent-rigidly start (point) notmuch-hello-indent))
>      nil))
>  
> -(defun notmuch-hello-insert-searches (title query-alist &rest options)
> -  "Insert a section with TITLE showing a list of buttons made from 
> QUERY-ALIST.
> +(defun notmuch-hello-insert-searches (title query-list &rest options)
> +  "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)
> -or (NAME QUERY COUNT-QUERY). If the latter form is used,
> -COUNT-QUERY specifies an alternate query to be used to generate
> -the count for the associated item.
> +QUERY-LIST should ideally be a plist but for backwards
> +compatibility other forms are also accepted (see
> +`notmuch-saved-search-get' for details).  The plist should
> +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.

Same comment about moving this format documentation to
`notmuch-saved-searches'.

>  
>  Supports the following entries in OPTIONS as a plist:
>  :initially-hidden - if non-nil, section will be hidden on startup
> @@ -768,7 +764,7 @@ (defun notmuch-hello-insert-searches (title query-alist 
> &rest options)
>                    "hide"))
>      (widget-insert "\n")
>      (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))
>                 searches)
>         (widget-insert "\n")
> diff --git a/emacs/notmuch.el b/emacs/notmuch.el
> index 233c784..1346b90 100644
> --- a/emacs/notmuch.el
> +++ b/emacs/notmuch.el
> @@ -823,14 +823,14 @@ (defun notmuch-search-buffer-title (query)
>         (let (longest
>               (longest-length 0))
>           (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)
>                           (> (length (match-string 0 query))
>                              longest-length)))
>                 do (setq longest tuple))
>           longest))
> -      (saved-search-name (car saved-search))
> -      (saved-search-query (cdr saved-search)))
> +      (saved-search-name (notmuch-saved-search-get saved-search :name))
> +      (saved-search-query (notmuch-saved-search-get saved-search :query)))
>      (cond ((and saved-search (equal saved-search-query query))
>          ;; Query is the same as saved search (ignoring case)
>          (concat "*notmuch-saved-search-" saved-search-name "*"))

Reply via email to