Re: [PATCH 2/5] emacs: hello: use the saved-search helper functions

Subject: Re: [PATCH 2/5] emacs: hello: use the saved-search helper functions

Date: Sat, 5 Apr 2014 21:06:09 -0400

To: Mark Walters

Cc: notmuch@notmuchmail.org

From: Austin Clements


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 "*"))

Thread: