[PATCH] emacs: hello: allow arbitrary lisp for generating the count.
David Edmondson
dme at dme.org
Tue May 6 22:41:00 PDT 2014
Looks good, two nits:
On Tue, May 06 2014, Mark Walters <markwalters1009 at gmail.com> wrote:
> This allows a function to be given for the count-query of a saved
> search. The function will be called with the query plist as an
> argument to generate the count shown and should return either a string
> or a number to be displayed as the count.
>
> If this option is a function then its query will not be part of the
> normal bacth query used so it may make notmuch-hello slower to
> display.
"batch"
> ---
> There was some discussion on irc today about notmuch hello being slow
> (because it can make a lot of queries). This extends the new
> saved-searches :count-query option to allow aribtrary lisp functions.
>
> Thus a user could configure some searches to be (lambda (elem) "--")
> so that these searches do not have a count executed and just display
> "--". Alternatively (and at the risk of some slow down) they could
> configure them to be my-notmuch-count where
>
> (defun my-notmuch-count (elem)
> (concat
> (notmuch-hello-nice-number
> (string-to-number
> (car
> (process-lines notmuch-command "count" "--output=messages"
> (plist-get elem :query)))))
> "/"
> (notmuch-hello-nice-number
> (string-to-number
> (car
> (process-lines notmuch-command "count" "--output=threads"
> (plist-get elem :query)))))))
>
> which would display messages/threads for that particular query.
>
> Maybe the interface is too complicated but I can actually imagine
> using this (possibly even both of the above for different of my saved
> searches!)
>
> Best wishes
>
> Mark
>
>
>
> emacs/notmuch-hello.el | 41 ++++++++++++++++++++++++++---------------
> 1 file changed, 26 insertions(+), 15 deletions(-)
>
> diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
> index 3de5238..877c84f 100644
> --- a/emacs/notmuch-hello.el
> +++ b/emacs/notmuch-hello.el
> @@ -85,7 +85,7 @@ (define-widget 'notmuch-saved-search-plist 'list
> (group :format "%v" :inline t (const :format " Query: " :query) (string :format "%v")))
> (checklist :inline t
> :format "%v"
> - (group :format "%v" :inline t (const :format "Count-Query: " :count-query) (string :format "%v"))
> + (group :format "%v" :inline t (const :format "Count-Query: " :count-query) (sexp :format "%v"))
> (group :format "%v" :inline t (const :format "" :sort-order)
> (choice :tag " Sort Order"
> (const :tag "Default" nil)
> @@ -101,9 +101,12 @@ (defcustom notmuch-saved-searches '((:name "inbox" :query "tag:inbox")
>
> :name Name of the search (required).
> :query Search to run (required).
> - :count-query Optional extra query to generate the count
> - shown. If not present then the :query property
> - is used.
> + :count-query Optional extra lisp to generate the count
"Optional function to generate the count"
> + shown. If it is a string then it is a query
> + string for generating the count. If it is a
> + function then the function is called with the
> + query plist as a parameter. If it is nil or not
> + present then the :query property is used.
> :sort-order Specify the sort order to be used for the search.
> Possible values are 'oldest-first 'newest-first or
> nil. Nil means use the default sort order.
> @@ -493,13 +496,14 @@ (defun notmuch-hello-query-counts (query-list &rest options)
> (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" " "
> - (notmuch-hello-filtered-query count-query
> - (or (plist-get options :filter-count)
> - (plist-get options :filter))))
> - "\n")))
> + (unless (functionp count-query)
> + (insert
> + (replace-regexp-in-string
> + "\n" " "
> + (notmuch-hello-filtered-query count-query
> + (or (plist-get options :filter-count)
> + (plist-get options :filter))))
> + "\n"))))
>
> (unless (= (call-process-region (point-min) (point-max) notmuch-command
> t t nil "count" "--batch") 0)
> @@ -515,12 +519,17 @@ (defun notmuch-hello-query-counts (query-list &rest options)
> (mapcar
> (lambda (elem)
> (let* ((elem-plist (notmuch-hello-saved-search-to-plist elem))
> + (count-query (plist-get elem-plist :count-query))
> (search-query (plist-get elem-plist :query))
> (filtered-query (notmuch-hello-filtered-query
> search-query (plist-get options :filter)))
> - (message-count (prog1 (read (current-buffer))
> - (forward-line 1))))
> - (when (and filtered-query (or (plist-get options :show-empty-searches) (> message-count 0)))
> + (message-count (if (functionp count-query)
> + (funcall count-query elem-plist)
> + (prog1 (read (current-buffer))
> + (forward-line 1)))))
> + (when (and filtered-query (or (plist-get options :show-empty-searches)
> + (not (integerp message-count))
> + (> message-count 0)))
> (setq elem-plist (plist-put elem-plist :query filtered-query))
> (plist-put elem-plist :count message-count))))
> query-list))))
> @@ -559,7 +568,9 @@ (defun notmuch-hello-insert-buttons (searches)
> (otherwise notmuch-search-oldest-first)))
> (msg-count (plist-get elem :count)))
> (widget-insert (format "%8s "
> - (notmuch-hello-nice-number msg-count)))
> + (if (stringp msg-count)
> + msg-count
> + (notmuch-hello-nice-number msg-count))))
> (widget-create 'push-button
> :notify #'notmuch-hello-widget-search
> :notmuch-search-terms query
> --
> 1.7.10.4
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 310 bytes
Desc: not available
URL: <http://notmuchmail.org/pipermail/notmuch/attachments/20140507/bc1cd05b/attachment.pgp>
More information about the notmuch
mailing list