<p><br>
I guess this now includes the optimization of doing the tagging in a single call to notmuch tag. (As opposed to calling it once per msg like it used to be a while back.) There was some discussion about the cmdline length for large threads potentially growing too big when I sent such an optimization patch, shall we just ignore that and hope for the best? I guess an idea was to limit to, say, a few hundred msg ids per command. (Again, sorry I can't look up the earlier thread now.)</p>

<p>On Jan 28, 2012 8:00 AM, "Dmitry Kurochkin" <<a href="mailto:dmitry.kurochkin@gmail.com">dmitry.kurochkin@gmail.com</a>> wrote:<br>
><br>
> Before the change, `notmuch-show-operate-all' used thread id for<br>
> "notmuch tag" search.  This could result in tagging unexpected<br>
> messages that were added to the thread after the notmuch-show buffer<br>
> was created.  The patch changes `notmuch-show-operate-all' to use ids<br>
> of shown messages to fix this.<br>
> ---<br>
>  emacs/notmuch-show.el |   23 ++++++++++++++++++++++-<br>
>  1 files changed, 22 insertions(+), 1 deletions(-)<br>
><br>
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el<br>
> index 2ca4d92..e606224 100644<br>
> --- a/emacs/notmuch-show.el<br>
> +++ b/emacs/notmuch-show.el<br>
> @@ -1170,6 +1170,15 @@ All currently available key bindings:<br>
>     (notmuch-show-move-to-message-top)<br>
>     t))<br>
><br>
> +(defun notmuch-show-mapc (function)<br>
> +  "Iterate through all messages with<br>
> +`notmuch-show-goto-message-next' and call `function' for side<br>
> +effects."<br>
> +  (save-excursion<br>
> +    (goto-char (point-min))<br>
> +    (loop do (funcall function)<br>
> +         while (notmuch-show-goto-message-next))))<br>
> +<br>
>  ;; Functions relating to the visibility of messages and their<br>
>  ;; components.<br>
><br>
> @@ -1222,6 +1231,18 @@ Some useful entries are:<br>
>   "Return the message id of the current message."<br>
>   (concat "id:\"" (notmuch-show-get-prop :id) "\""))<br>
><br>
> +(defun notmuch-show-get-messages-ids ()<br>
> +  "Return all message ids of currently shown messages."<br>
> +  (let ((message-ids))<br>
> +    (notmuch-show-mapc<br>
> +     (lambda () (push (notmuch-show-get-message-id) message-ids)))<br>
> +    message-ids))<br>
> +<br>
> +(defun notmuch-show-get-messages-ids-search ()<br>
> +  "Return a search string for all message ids of currently shown<br>
> +messages."<br>
> +  (mapconcat 'identity (notmuch-show-get-messages-ids) " or "))<br>
> +<br>
>  ;; dme: Would it make sense to use a macro for many of these?<br>
><br>
>  (defun notmuch-show-get-filename ()<br>
> @@ -1496,7 +1517,7 @@ i.e. a list of tags to change with '+' and '-' prefixes."<br>
>  `Changed-tags' is a list of tag operations for \"notmuch tag\",<br>
>  i.e. a list of tags to change with '+' and '-' prefixes."<br>
>   (interactive (notmuch-select-tags-with-completion nil notmuch-show-thread-id))<br>
> -  (apply 'notmuch-tag notmuch-show-thread-id changed-tags)<br>
> +  (apply 'notmuch-tag (notmuch-show-get-messages-ids-search) changed-tags)<br>
>   (save-excursion<br>
>     (goto-char (point-min))<br>
>     (loop do (let* ((current-tags (notmuch-show-get-tags))<br>
> --<br>
> 1.7.8.3<br>
><br>
> _______________________________________________<br>
> notmuch mailing list<br>
> <a href="mailto:notmuch@notmuchmail.org">notmuch@notmuchmail.org</a><br>
> <a href="http://notmuchmail.org/mailman/listinfo/notmuch">http://notmuchmail.org/mailman/listinfo/notmuch</a><br>
</p>