[PATCH v2 6/6] emacs: `notmuch-show-tag-all' with prefix arg only tags open messages

Ethan Glasser-Camp ethan.glasser.camp at gmail.com
Mon Oct 15 20:39:47 PDT 2012


Pieter Praet <pieter at praet.org> writes:

> * emacs/notmuch-show.el
>
>   (notmuch-show-get-messages-ids):
>     If provided with optional argument PREDICATE, only return
>     Message-Id's of messages for which PREDICATE returns non-nil.
>
>   (notmuch-show-tag-all):
>     New argument ONLY-OPEN (set to `current-prefix-arg' if running
>     interactively): if non-nil, only change tags of *open* messages.
>     Also correct original docstring: 's/thread/buffer/'.
>
>   (notmuch-show-archive-thread):
>     Update wrt changes to `notmuch-show-tag-all'.
>
> * test/emacs
>
>   - Subtest "notmuch-show: change tags of open messages in current buffer"
>     is no longer broken...

This patch is stale, but in case it helps..

> ---
>  emacs/notmuch-show.el |   33 ++++++++++++++++++++++++---------
>  test/emacs            |    1 -
>  2 files changed, 24 insertions(+), 10 deletions(-)
>
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
> index 05606fc..4bd1a7c 100644
> --- a/emacs/notmuch-show.el
> +++ b/emacs/notmuch-show.el
> @@ -1339,14 +1339,18 @@ (defun notmuch-show-get-message-id ()
>    "Return the message id of the current message."
>    (concat "id:\"" (notmuch-show-get-prop :id) "\""))
>  
> -(defun notmuch-show-get-messages-ids (&optional separator)
> +(defun notmuch-show-get-messages-ids (&optional separator predicate)
>    "Return a list of Message-Id's of all messages in the current buffer.
>  
>  If provided with optional argument SEPARATOR, return a string
> -instead, consisting of all Message-Id's separated by SEPARATOR."
> +instead, consisting of all Message-Id's separated by SEPARATOR.
> +
> +If provided with optional argument PREDICATE, only return
> +Message-Id's of messages for which PREDICATE returns non-nil."
>    (let ((message-ids))
>      (notmuch-show-mapc
> -     (lambda () (push (notmuch-show-get-message-id) message-ids)))
> +     (lambda () (push (notmuch-show-get-message-id) message-ids))
> +     predicate)
>      (if separator
>  	(mapconcat 'identity message-ids separator)
>        message-ids)))
> @@ -1633,18 +1637,29 @@ (defun notmuch-show-tag (&optional initial-input)
>  		      initial-input (notmuch-show-get-message-id))))
>      (apply 'notmuch-show-tag-message tag-changes)))
>  
> -(defun notmuch-show-tag-all (&rest tag-changes)
> -  "Change tags for all messages in the current thread.
> +(defun notmuch-show-tag-all (only-open &rest tag-changes)
> +  "Change tags of all messages in the current buffer.

I'm not crazy about notmuch-show-tag-all having an argument to control
whether or not it tags all. Introduce another function, or perhaps
change this one's name?

I also don't really like that the only-open argument comes before the
tag changes. This means changing every caller (although I guess there's
just one right now). I think tag-changes are more important and should
come first. (tag-changes are &optional instead of &rest in master, so
you can just put only-open after instead of before.)

> +
> +If ONLY-OPEN is non-nil, only change tags of *open* messages in
> +the current buffer.
>  
>  TAG-CHANGES is a list of tag operations for `notmuch-tag'."
> -  (interactive (notmuch-read-tag-changes nil notmuch-show-thread-id))
> -  (apply 'notmuch-tag (notmuch-show-get-messages-ids " or ") tag-changes)
> +  (interactive (cons current-prefix-arg
> +		     (notmuch-read-tag-changes nil notmuch-show-thread-id)))
> +  (apply 'notmuch-tag
> +	 (notmuch-show-get-messages-ids
> +	  " or "
> +	  `(lambda ()
> +	     ,(if only-open '(notmuch-show-message-visible-p) t)))
> +	 tag-changes)

This is a very awkward use of backquote, to my eyes. Besides, can't
you just replace this with (if only-open 'notmuch-show-message-visible-p
nil) ?

>    (notmuch-show-mapc
>     (lambda ()
>       (let* ((current-tags (notmuch-show-get-tags))
>  	    (new-tags (notmuch-update-tags current-tags tag-changes)))
>         (unless (equal current-tags new-tags)
> -	 (notmuch-show-set-tags new-tags))))))
> +	 (notmuch-show-set-tags new-tags))))
> +   `(lambda ()
> +      ,(if only-open '(notmuch-show-message-visible-p) t))))

Same.

Ethan


More information about the notmuch mailing list