[PATCH] notmuch-mutt: add --whole-thread flag
It can be useful to manipulate tags on an entire thread instead of just a single message. For example: # Mark entire thread unread notmuch-mutt tag --whole-thread -- -unread < MAIL Add the --whole-thread flag which first looks up the thread for a given message and then applies the tag action on the entire thread. Signed-off-by: Stefan Hajnoczi --- Warning: I don't really know Perl :) It would be nice if notmuch's query syntax could match threads. Then core notmuch CLI could perform this operation in a single command: # Mark entire thread unread given a single Message-ID notmuch tag thread-contains(id:1234 at foo.com) -- -unread Since the core cannot do this query today this patch bolts it on top for "notmuch-mutt tag". contrib/notmuch-mutt/notmuch-mutt | 38 +++--- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/contrib/notmuch-mutt/notmuch-mutt b/contrib/notmuch-mutt/notmuch-mutt index d14709d..8529940 100755 --- a/contrib/notmuch-mutt/notmuch-mutt +++ b/contrib/notmuch-mutt/notmuch-mutt @@ -125,6 +125,14 @@ sub get_message_id() { return $1; } +sub get_thread_id($) { +my ($mid) = @_; +my $search_cmd = 'notmuch search --output=threads ' +. shell_quote("id:$mid"); +`$search_cmd` =~ /^thread:(.*)$/; +return $1; +} + sub search_action($$$@) { my ($interactive, $results_dir, $remove_dups, @params) = @_; @@ -141,20 +149,26 @@ sub search_action($$$@) { sub thread_action($$@) { my ($results_dir, $remove_dups, @params) = @_; -my $mid = get_message_id(); -my $search_cmd = 'notmuch search --output=threads ' . shell_quote("id:$mid"); -my $tid = `$search_cmd`; # get thread id -chomp($tid); +my $tid = get_thread_id(get_message_id()); -search($results_dir, $remove_dups, $tid); +search($results_dir, $remove_dups, "thread:$tid"); } -sub tag_action(@) { +sub tag_action($@) { +my ($whole_thread, @params) = @_; my $mid = get_message_id(); -system("notmuch tag " - . shell_quote(join(' ', @_)) - . " id:$mid"); +if ($whole_thread) { + my $tid = get_thread_id($mid); + + system("notmuch tag " + . shell_quote(join(' ', @params)) + . " thread:$tid"); +} else { + system("notmuch tag " + . shell_quote(join(' ', @params)) + . " id:$mid"); +} } sub die_usage() { @@ -170,12 +184,14 @@ sub main() { my $interactive = 0; my $help_needed = 0; my $remove_dups = 0; +my $whole_thread = 0; my $getopt = GetOptions( "h|help" => \$help_needed, "o|output-dir=s" => \$results_dir, "p|prompt" => \$interactive, - "r|remove-dups" => \$remove_dups); + "r|remove-dups" => \$remove_dups, + "w|whole-thread" => \$whole_thread); if (! $getopt || $#ARGV < 0) { die_usage() }; my ($action, @params) = ($ARGV[0], @ARGV[1..$#ARGV]); @@ -193,7 +209,7 @@ sub main() { } elsif ($action eq "thread") { thread_action($results_dir, $remove_dups, @params); } elsif ($action eq "tag") { - tag_action(@params); + tag_action($whole_thread, @params); } else { die_usage(); } -- 1.7.11.4
[PATCH v2] emacs: add function to toggle display of all multipart/alternative parts
On Fri, Aug 10, 2012 at 1:10 AM, Mark Walters wrote: > > Some messages are sent as multipart/alternative but the alternatives > contain different information. This allows the user to cycle which > part to view. By default this is bound to 'W'. I've started using this, and quite like it. Only thing missing I can see would be a customizable way to say which types should be preferred.
Re: [PATCH v2] emacs: add function to toggle display of all multipart/alternative parts
On Fri, Aug 10, 2012 at 1:10 AM, Mark Walters markwalters1...@gmail.com wrote: Some messages are sent as multipart/alternative but the alternatives contain different information. This allows the user to cycle which part to view. By default this is bound to 'W'. I've started using this, and quite like it. Only thing missing I can see would be a customizable way to say which types should be preferred. ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] notmuch-mutt: add --whole-thread flag
It can be useful to manipulate tags on an entire thread instead of just a single message. For example: # Mark entire thread unread notmuch-mutt tag --whole-thread -- -unread MAIL Add the --whole-thread flag which first looks up the thread for a given message and then applies the tag action on the entire thread. Signed-off-by: Stefan Hajnoczi stefa...@gmail.com --- Warning: I don't really know Perl :) It would be nice if notmuch's query syntax could match threads. Then core notmuch CLI could perform this operation in a single command: # Mark entire thread unread given a single Message-ID notmuch tag thread-contains(id:1...@foo.com) -- -unread Since the core cannot do this query today this patch bolts it on top for notmuch-mutt tag. contrib/notmuch-mutt/notmuch-mutt | 38 +++--- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/contrib/notmuch-mutt/notmuch-mutt b/contrib/notmuch-mutt/notmuch-mutt index d14709d..8529940 100755 --- a/contrib/notmuch-mutt/notmuch-mutt +++ b/contrib/notmuch-mutt/notmuch-mutt @@ -125,6 +125,14 @@ sub get_message_id() { return $1; } +sub get_thread_id($) { +my ($mid) = @_; +my $search_cmd = 'notmuch search --output=threads ' +. shell_quote(id:$mid); +`$search_cmd` =~ /^thread:(.*)$/; +return $1; +} + sub search_action($$$@) { my ($interactive, $results_dir, $remove_dups, @params) = @_; @@ -141,20 +149,26 @@ sub search_action($$$@) { sub thread_action($$@) { my ($results_dir, $remove_dups, @params) = @_; -my $mid = get_message_id(); -my $search_cmd = 'notmuch search --output=threads ' . shell_quote(id:$mid); -my $tid = `$search_cmd`; # get thread id -chomp($tid); +my $tid = get_thread_id(get_message_id()); -search($results_dir, $remove_dups, $tid); +search($results_dir, $remove_dups, thread:$tid); } -sub tag_action(@) { +sub tag_action($@) { +my ($whole_thread, @params) = @_; my $mid = get_message_id(); -system(notmuch tag - . shell_quote(join(' ', @_)) - . id:$mid); +if ($whole_thread) { + my $tid = get_thread_id($mid); + + system(notmuch tag + . shell_quote(join(' ', @params)) + . thread:$tid); +} else { + system(notmuch tag + . shell_quote(join(' ', @params)) + . id:$mid); +} } sub die_usage() { @@ -170,12 +184,14 @@ sub main() { my $interactive = 0; my $help_needed = 0; my $remove_dups = 0; +my $whole_thread = 0; my $getopt = GetOptions( h|help = \$help_needed, o|output-dir=s = \$results_dir, p|prompt = \$interactive, - r|remove-dups = \$remove_dups); + r|remove-dups = \$remove_dups, + w|whole-thread = \$whole_thread); if (! $getopt || $#ARGV 0) { die_usage() }; my ($action, @params) = ($ARGV[0], @ARGV[1..$#ARGV]); @@ -193,7 +209,7 @@ sub main() { } elsif ($action eq thread) { thread_action($results_dir, $remove_dups, @params); } elsif ($action eq tag) { - tag_action(@params); + tag_action($whole_thread, @params); } else { die_usage(); } -- 1.7.11.4 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch