unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Jameson Graef Rollins <jrollins@finestructure.net>
To: Mark Walters <markwalters1009@gmail.com>,
	Notmuch Mail <notmuch@notmuchmail.org>
Subject: Re: [PATCH 7/8] emacs: modify show tag functions to use new notmuch-tag interface
Date: Mon, 09 Apr 2012 00:15:15 -0700	[thread overview]
Message-ID: <87d37hl6kc.fsf@servo.finestructure.net> (raw)
In-Reply-To: <87zkam6fn3.fsf@qmul.ac.uk>

[-- Attachment #1: Type: text/plain, Size: 3107 bytes --]

On Sat, Apr 07 2012, Mark Walters <markwalters1009@gmail.com> wrote:
> I think this is what is making the two tests fail: they count the number
> of invocations of notmuch and in case there is one invocation of notmuch
> show and one of notmuch tag -unread message-id, where before it was just
> the single notmuch show.

Good call, Mark.  After a bit of testing it looks like that is what's
going on.  I was confused, since I had thought that the call to
notmuch-show should have involved two notmuch calls originally as well,
one for retrieving the message and the other removing the unread tag.
However, it appears the messages in those tests don't have unread tags
after all.  Not sure why, but that explains it.

So I guess the upshot is that moving all the common prompting and tag
validation stuff into notmuch-tag means that in certain cases there will
be extra notmuch calls, even if no tags are changed.  Is that a problem?

What I can do, though, is add extra validation to notmuch-tag to not
actually call notmuch tag, or any of the pre- and post- tagging hooks,
if no tags are changing.  This will still require one call to notmuch to
retrieve the current set of tags for the query, but at least it wont tag
or call the hooks if nothing is changing.  That seems reasonable to me,
but please let me know if you think it's not.

I've pasted below a new version of notmuch-tag that addresses these
issues.  Let me know what you think, and I'll resubmit the series.

jamie.


(defun notmuch-tag (query &optional tag-changes)
  "Add/remove tags in TAG-CHANGES to messages matching QUERY.

QUERY should be a string containing the search-terms.
TAG-CHANGES can take multiple forms.  If TAG-CHANGES is a list of
strings of the form \"+tag\" or \"-tag\" then those are the tag
changes applied.  If TAG-CHANGES is a string then it is
interpreted as a single tag change.  If TAG-CHANGES is the string
\"-\" or \"+\", or null, then the user is prompted to enter the
tag changes.

Note: Other code should always use this function alter tags of
messages instead of running (notmuch-call-notmuch-process \"tag\" ..)
directly, so that hooks specified in notmuch-before-tag-hook and
notmuch-after-tag-hook will be run."
  ;; Perform some validation
  (if (string-or-null-p tag-changes)
      (if (or (string= tag-changes "-") (string= tag-changes "+") (null tag-changes))
	  (setq tag-changes (notmuch-read-tag-changes tag-changes query))
	(setq tag-changes (list tag-changes))))
  (mapc (lambda (tag-change)
	  (unless (string-match-p "^[-+]\\S-+$" tag-change)
	    (error "Tag must be of the form `+this_tag' or `-that_tag'")))
	tag-changes)
  (let* ((current-tags (notmuch-tag-completions (list query)))
	 (new-tags (notmuch-update-tags current-tags tag-changes)))
    (if (equal current-tags new-tags)
	;; if no tags are changing, return nil
	nil
      (run-hooks 'notmuch-before-tag-hook)
      (apply 'notmuch-call-notmuch-process "tag"
	     (append tag-changes (list "--" query)))
      (run-hooks 'notmuch-after-tag-hook)
      ;; otherwise, return the list of actual changed tags
      tag-changes)))

[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]

  reply	other threads:[~2012-04-09  7:15 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-02  8:20 improvements to some emacs search tagging functions Jameson Graef Rollins
2012-04-02  8:20 ` [PATCH 1/6] emacs: update tag-completion function Jameson Graef Rollins
2012-04-02  8:20   ` [PATCH 2/6] emacs: have tag-completion return all tags for nil input Jameson Graef Rollins
2012-04-02  8:20     ` [PATCH 3/6] emacs: modify notmuch-search-tag to not prompt if tags provided as argument Jameson Graef Rollins
2012-04-02  8:20       ` [PATCH 4/6] emacs: remove redundant notmuch-search-tag-thread function Jameson Graef Rollins
2012-04-02  8:20         ` [PATCH 5/6] emacs: change name of search-archive-thread function to just search-archive Jameson Graef Rollins
2012-04-02  8:20           ` [PATCH 6/6] emacs: include tags from excluded messages in tag tab completion Jameson Graef Rollins
2012-04-02  8:44       ` [PATCH 3/6] emacs: modify notmuch-search-tag to not prompt if tags provided as argument Dmitry Kurochkin
2012-04-02  8:35     ` [PATCH 2/6] emacs: have tag-completion return all tags for nil input Dmitry Kurochkin
2012-04-02  8:39 ` improvements to some emacs search tagging functions Jameson Graef Rollins
2012-04-08  0:35 ` emacs tagging cleanup Jameson Graef Rollins
2012-04-08  0:35   ` [PATCH 1/8] emacs: create notmuch-tag.el, and move appropriate functions from notmuch.el Jameson Graef Rollins
2012-04-08  0:35     ` [PATCH 2/8] emacs: update tag-completion function Jameson Graef Rollins
2012-04-08  0:35       ` [PATCH 3/8] emacs: have tag-completion return all tags for nil input Jameson Graef Rollins
2012-04-08  0:35         ` [PATCH 4/8] emacs: allow notmuch-tag to accept string inputs and prompt for tags Jameson Graef Rollins
2012-04-08  0:35           ` [PATCH 5/8] emacs: modify search tag functions to use new notmuch-tag interface Jameson Graef Rollins
2012-04-08  0:35             ` [PATCH 6/8] emacs: eliminate search-tag-thread in favor of just search-tag Jameson Graef Rollins
2012-04-08  0:35               ` [PATCH 7/8] emacs: modify show tag functions to use new notmuch-tag interface Jameson Graef Rollins
2012-04-08  0:35                 ` [PATCH 8/8] emacs: eliminate show-tag-message in favor of just show-tag Jameson Graef Rollins
2012-04-08  3:56                 ` [PATCH 7/8] emacs: modify show tag functions to use new notmuch-tag interface Mark Walters
2012-04-09  7:15                   ` Jameson Graef Rollins [this message]
2012-04-09 18:22                     ` Mark Walters
2012-04-09 18:42                 ` Mark Walters
2012-04-09 18:39             ` [PATCH 5/8] emacs: modify search " Mark Walters
2012-04-14 19:07               ` Jameson Graef Rollins
2012-04-09 17:57       ` [PATCH 2/8] emacs: update tag-completion function Mark Walters
2012-04-09 18:09         ` Jameson Graef Rollins
2012-04-14 18:52   ` emacs tagging cleanup, v3 Jameson Graef Rollins
2012-04-14 18:52     ` [PATCH 1/5] emacs: create notmuch-tag.el, and move appropriate functions from notmuch.el Jameson Graef Rollins
2012-04-14 18:52       ` [PATCH 2/5] emacs: allow notmuch-tag to accept string inputs and prompt for tags Jameson Graef Rollins
2012-04-14 18:52         ` [PATCH 3/5] emacs: modify search tag functions to use new notmuch-tag interface Jameson Graef Rollins
2012-04-14 18:52           ` [PATCH 4/5] emacs: modify show " Jameson Graef Rollins
2012-04-14 18:52             ` [PATCH 5/5] emacs: eliminate search-tag-thread in favor of just search-tag Jameson Graef Rollins
2012-04-14 20:35         ` [PATCH 2/5] emacs: allow notmuch-tag to accept string inputs and prompt for tags Mark Walters
2012-04-14 20:49         ` [PATCH v2 " Jameson Graef Rollins
2012-04-28  8:30     ` emacs tagging cleanup, v3 Tomi Ollila

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87d37hl6kc.fsf@servo.finestructure.net \
    --to=jrollins@finestructure.net \
    --cc=markwalters1009@gmail.com \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).