[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