#
# notmuch-mutt - notmuch (of a) helper for Mutt
#
-# Copyright: © 2011-2015 Stefano Zacchiroli <zack@upsilon.cc>
+# Copyright: © 2011-2015 Stefano Zacchiroli <zack@upsilon.cc>
# License: GNU General Public License (GPL), version 3 or above
#
# See the bottom of this file for more documentation.
use warnings;
use File::Path;
+use File::Basename;
use Getopt::Long qw(:config no_getopt_compat);
use Mail::Header;
use Mail::Box::Maildir;
my ($maildir, $remove_dups, $query) = @_;
my $dup_option = "";
- $query = shell_quote($query);
-
- if ($remove_dups) {
- $dup_option = "--duplicate=1";
- }
+ my @args = qw/notmuch search --output=files/;
+ push @args, "--duplicate=1" if $remove_dups;
+ push @args, $query;
empty_maildir($maildir);
- system("notmuch search --output=files $dup_option $query"
- . " | sed -e 's: :\\\\ :g'"
- . " | xargs -r -I searchoutput ln -s searchoutput $maildir/cur/");
+ open my $pipe, '-|', @args or die "Running @args failed: $!\n";
+ while (<$pipe>) {
+ chomp;
+ my $ln = "$maildir/cur/" . basename $_;
+ symlink $_, "$ln" or warn "Failed to symlink '$_', '$ln': $!\n";
+ }
}
sub prompt($$) {
empty_maildir($results_dir);
die "notmuch-mutt: cannot find Message-Id, abort.\n";
}
- my $search_cmd = 'notmuch search --output=threads ' . shell_quote("id:$mid");
+
+ $mid =~ s/ //g; # notmuch strips spaces before storing Message-Id
+ $mid =~ s/"/""/g; # escape all double quote characters
+
+ my $search_cmd = 'notmuch search --output=threads ' . shell_quote(qq{id:"$mid"});
my $tid = `$search_cmd`; # get thread id
chomp($tid);
my $mid = get_message_id();
defined $mid or die "notmuch-mutt: cannot find Message-Id, abort.\n";
- system("notmuch", "tag", @_, "--", "id:$mid");
+ $mid =~ s/ //g; # notmuch strips spaces before storing Message-Id
+ $mid =~ s/"/""/g; # escape all double quote characters
+
+ system("notmuch", "tag", @_, "--", qq{id:"$mid"});
}
sub die_usage() {