The shell pipeline used to symlink files based in search results to "cache" directory for mutt(1) to use was prone to portability problems (due to /bin/sh differences).
The replacement executes `notmuch search` without intermediate shell (so shell_quote was removed in this case), reads the filenames from piped output and symlinks files internally. --- Now also tested a bit by me (remoteusage provides stale symlinks ;) contrib/notmuch-mutt/notmuch-mutt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/contrib/notmuch-mutt/notmuch-mutt b/contrib/notmuch-mutt/notmuch-mutt index d33223bd..d1e2c084 100755 --- a/contrib/notmuch-mutt/notmuch-mutt +++ b/contrib/notmuch-mutt/notmuch-mutt @@ -12,6 +12,7 @@ use strict; use warnings; use File::Path; +use File::Basename; use Getopt::Long qw(:config no_getopt_compat); use Mail::Header; use Mail::Box::Maildir; @@ -41,16 +42,17 @@ sub search($$$) { 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'" - . " | while IFS= read -r searchoutput; do ln -s \$searchoutput $maildir/cur/; done"); + 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($$) { -- 2.25.1 _______________________________________________ notmuch mailing list -- notm...@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org