--- /dev/null
+Return-Path: <jani@nikula.org>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+ by olra.theworths.org (Postfix) with ESMTP id 33771431FB6\r
+ for <notmuch@notmuchmail.org>; Sat, 28 Jan 2012 01:09:49 -0800 (PST)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: -0.699\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=-0.699 tagged_above=-999 required=5\r
+ tests=[HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+ by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+ with ESMTP id KnLglAAz3Pps for <notmuch@notmuchmail.org>;\r
+ Sat, 28 Jan 2012 01:09:48 -0800 (PST)\r
+Received: from mail-pw0-f53.google.com (mail-pw0-f53.google.com\r
+ [209.85.160.53]) (using TLSv1 with cipher RC4-SHA (128/128 bits))\r
+ (No client certificate requested)\r
+ by olra.theworths.org (Postfix) with ESMTPS id 371BC431FAE\r
+ for <notmuch@notmuchmail.org>; Sat, 28 Jan 2012 01:09:48 -0800 (PST)\r
+Received: by pbbb4 with SMTP id b4so3083846pbb.26\r
+ for <notmuch@notmuchmail.org>; Sat, 28 Jan 2012 01:09:47 -0800 (PST)\r
+MIME-Version: 1.0\r
+Received: by 10.68.189.6 with SMTP id ge6mr21709820pbc.93.1327741785529; Sat,\r
+ 28 Jan 2012 01:09:45 -0800 (PST)\r
+Received: by 10.68.236.137 with HTTP; Sat, 28 Jan 2012 01:09:45 -0800 (PST)\r
+Received: by 10.68.236.137 with HTTP; Sat, 28 Jan 2012 01:09:45 -0800 (PST)\r
+In-Reply-To: <1327730348-6466-1-git-send-email-dmitry.kurochkin@gmail.com>\r
+References: <1327725684-5887-1-git-send-email-dmitry.kurochkin@gmail.com>\r
+ <1327730348-6466-1-git-send-email-dmitry.kurochkin@gmail.com>\r
+Date: Sat, 28 Jan 2012 11:09:45 +0200\r
+Message-ID:\r
+ <CAB+hUn8feOnr8N_mGXw+wKA6exZG3V-7uW0Yz6+wPN=B+tCNMQ@mail.gmail.com>\r
+Subject: Re: [PATCH 8/6] emacs: use message ids instead of thread id in\r
+ `notmuch-show-operate-all'\r
+From: Jani Nikula <jani@nikula.org>\r
+To: Dmitry Kurochkin <dmitry.kurochkin@gmail.com>\r
+Content-Type: multipart/alternative; boundary=e89a8ff1c3e87ade2104b792f9ce\r
+Cc: notmuch@notmuchmail.org\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+ <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+ <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+ <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Sat, 28 Jan 2012 09:09:49 -0000\r
+\r
+--e89a8ff1c3e87ade2104b792f9ce\r
+Content-Type: text/plain; charset=UTF-8\r
+\r
+I guess this now includes the optimization of doing the tagging in a single\r
+call to notmuch tag. (As opposed to calling it once per msg like it used to\r
+be a while back.) There was some discussion about the cmdline length for\r
+large threads potentially growing too big when I sent such an optimization\r
+patch, shall we just ignore that and hope for the best? I guess an idea was\r
+to limit to, say, a few hundred msg ids per command. (Again, sorry I can't\r
+look up the earlier thread now.)\r
+\r
+On Jan 28, 2012 8:00 AM, "Dmitry Kurochkin" <dmitry.kurochkin@gmail.com>\r
+wrote:\r
+>\r
+> Before the change, `notmuch-show-operate-all' used thread id for\r
+> "notmuch tag" search. This could result in tagging unexpected\r
+> messages that were added to the thread after the notmuch-show buffer\r
+> was created. The patch changes `notmuch-show-operate-all' to use ids\r
+> of shown messages to fix this.\r
+> ---\r
+> emacs/notmuch-show.el | 23 ++++++++++++++++++++++-\r
+> 1 files changed, 22 insertions(+), 1 deletions(-)\r
+>\r
+> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el\r
+> index 2ca4d92..e606224 100644\r
+> --- a/emacs/notmuch-show.el\r
+> +++ b/emacs/notmuch-show.el\r
+> @@ -1170,6 +1170,15 @@ All currently available key bindings:\r
+> (notmuch-show-move-to-message-top)\r
+> t))\r
+>\r
+> +(defun notmuch-show-mapc (function)\r
+> + "Iterate through all messages with\r
+> +`notmuch-show-goto-message-next' and call `function' for side\r
+> +effects."\r
+> + (save-excursion\r
+> + (goto-char (point-min))\r
+> + (loop do (funcall function)\r
+> + while (notmuch-show-goto-message-next))))\r
+> +\r
+> ;; Functions relating to the visibility of messages and their\r
+> ;; components.\r
+>\r
+> @@ -1222,6 +1231,18 @@ Some useful entries are:\r
+> "Return the message id of the current message."\r
+> (concat "id:\"" (notmuch-show-get-prop :id) "\""))\r
+>\r
+> +(defun notmuch-show-get-messages-ids ()\r
+> + "Return all message ids of currently shown messages."\r
+> + (let ((message-ids))\r
+> + (notmuch-show-mapc\r
+> + (lambda () (push (notmuch-show-get-message-id) message-ids)))\r
+> + message-ids))\r
+> +\r
+> +(defun notmuch-show-get-messages-ids-search ()\r
+> + "Return a search string for all message ids of currently shown\r
+> +messages."\r
+> + (mapconcat 'identity (notmuch-show-get-messages-ids) " or "))\r
+> +\r
+> ;; dme: Would it make sense to use a macro for many of these?\r
+>\r
+> (defun notmuch-show-get-filename ()\r
+> @@ -1496,7 +1517,7 @@ i.e. a list of tags to change with '+' and '-'\r
+prefixes."\r
+> `Changed-tags' is a list of tag operations for \"notmuch tag\",\r
+> i.e. a list of tags to change with '+' and '-' prefixes."\r
+> (interactive (notmuch-select-tags-with-completion nil\r
+notmuch-show-thread-id))\r
+> - (apply 'notmuch-tag notmuch-show-thread-id changed-tags)\r
+> + (apply 'notmuch-tag (notmuch-show-get-messages-ids-search)\r
+changed-tags)\r
+> (save-excursion\r
+> (goto-char (point-min))\r
+> (loop do (let* ((current-tags (notmuch-show-get-tags))\r
+> --\r
+> 1.7.8.3\r
+>\r
+> _______________________________________________\r
+> notmuch mailing list\r
+> notmuch@notmuchmail.org\r
+> http://notmuchmail.org/mailman/listinfo/notmuch\r
+\r
+--e89a8ff1c3e87ade2104b792f9ce\r
+Content-Type: text/html; charset=UTF-8\r
+Content-Transfer-Encoding: quoted-printable\r
+\r
+<p><br>\r
+I guess this now includes the optimization of doing the tagging in a single=\r
+ call to notmuch tag. (As opposed to calling it once per msg like it used t=\r
+o be a while back.) There was some discussion about the cmdline length for =\r
+large threads potentially growing too big when I sent such an optimization =\r
+patch, shall we just ignore that and hope for the best? I guess an idea was=\r
+ to limit to, say, a few hundred msg ids per command. (Again, sorry I can&#=\r
+39;t look up the earlier thread now.)</p>\r
+\r
+<p>On Jan 28, 2012 8:00 AM, "Dmitry Kurochkin" <<a href=3D"mai=\r
+lto:dmitry.kurochkin@gmail.com">dmitry.kurochkin@gmail.com</a>> wrote:<b=\r
+r>\r
+><br>\r
+> Before the change, `notmuch-show-operate-all' used thread id for<b=\r
+r>\r
+> "notmuch tag" search. =C2=A0This could result in tagging une=\r
+xpected<br>\r
+> messages that were added to the thread after the notmuch-show buffer<b=\r
+r>\r
+> was created. =C2=A0The patch changes `notmuch-show-operate-all' to=\r
+ use ids<br>\r
+> of shown messages to fix this.<br>\r
+> ---<br>\r
+> =C2=A0emacs/notmuch-show.el | =C2=A0 23 ++++++++++++++++++++++-<br>\r
+> =C2=A01 files changed, 22 insertions(+), 1 deletions(-)<br>\r
+><br>\r
+> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el<br>\r
+> index 2ca4d92..e606224 100644<br>\r
+> --- a/emacs/notmuch-show.el<br>\r
+> +++ b/emacs/notmuch-show.el<br>\r
+> @@ -1170,6 +1170,15 @@ All currently available key bindings:<br>\r
+> =C2=A0 =C2=A0 (notmuch-show-move-to-message-top)<br>\r
+> =C2=A0 =C2=A0 t))<br>\r
+><br>\r
+> +(defun notmuch-show-mapc (function)<br>\r
+> + =C2=A0"Iterate through all messages with<br>\r
+> +`notmuch-show-goto-message-next' and call `function' for side=\r
+<br>\r
+> +effects."<br>\r
+> + =C2=A0(save-excursion<br>\r
+> + =C2=A0 =C2=A0(goto-char (point-min))<br>\r
+> + =C2=A0 =C2=A0(loop do (funcall function)<br>\r
+> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 while (notmuch-show-goto-message-next)))=\r
+)<br>\r
+> +<br>\r
+> =C2=A0;; Functions relating to the visibility of messages and their<br=\r
+>\r
+> =C2=A0;; components.<br>\r
+><br>\r
+> @@ -1222,6 +1231,18 @@ Some useful entries are:<br>\r
+> =C2=A0 "Return the message id of the current message."<br>\r
+> =C2=A0 (concat "id:\"" (notmuch-show-get-prop :id) &quo=\r
+t;\""))<br>\r
+><br>\r
+> +(defun notmuch-show-get-messages-ids ()<br>\r
+> + =C2=A0"Return all message ids of currently shown messages."=\r
+;<br>\r
+> + =C2=A0(let ((message-ids))<br>\r
+> + =C2=A0 =C2=A0(notmuch-show-mapc<br>\r
+> + =C2=A0 =C2=A0 (lambda () (push (notmuch-show-get-message-id) message=\r
+-ids)))<br>\r
+> + =C2=A0 =C2=A0message-ids))<br>\r
+> +<br>\r
+> +(defun notmuch-show-get-messages-ids-search ()<br>\r
+> + =C2=A0"Return a search string for all message ids of currently =\r
+shown<br>\r
+> +messages."<br>\r
+> + =C2=A0(mapconcat 'identity (notmuch-show-get-messages-ids) "=\r
+; or "))<br>\r
+> +<br>\r
+> =C2=A0;; dme: Would it make sense to use a macro for many of these?<br=\r
+>\r
+><br>\r
+> =C2=A0(defun notmuch-show-get-filename ()<br>\r
+> @@ -1496,7 +1517,7 @@ i.e. a list of tags to change with '+' a=\r
+nd '-' prefixes."<br>\r
+> =C2=A0`Changed-tags' is a list of tag operations for \"notmuc=\r
+h tag\",<br>\r
+> =C2=A0i.e. a list of tags to change with '+' and '-' p=\r
+refixes."<br>\r
+> =C2=A0 (interactive (notmuch-select-tags-with-completion nil notmuch-s=\r
+how-thread-id))<br>\r
+> - =C2=A0(apply 'notmuch-tag notmuch-show-thread-id changed-tags)<b=\r
+r>\r
+> + =C2=A0(apply 'notmuch-tag (notmuch-show-get-messages-ids-search)=\r
+ changed-tags)<br>\r
+> =C2=A0 (save-excursion<br>\r
+> =C2=A0 =C2=A0 (goto-char (point-min))<br>\r
+> =C2=A0 =C2=A0 (loop do (let* ((current-tags (notmuch-show-get-tags))<b=\r
+r>\r
+> --<br>\r
+> 1.7.8.3<br>\r
+><br>\r
+> _______________________________________________<br>\r
+> notmuch mailing list<br>\r
+> <a href=3D"mailto:notmuch@notmuchmail.org">notmuch@notmuchmail.org</a>=\r
+<br>\r
+> <a href=3D"http://notmuchmail.org/mailman/listinfo/notmuch">http://not=\r
+muchmail.org/mailman/listinfo/notmuch</a><br>\r
+</p>\r
+\r
+--e89a8ff1c3e87ade2104b792f9ce--\r