From d8791352005e2aaed098b93614aa10df241c4e15 Mon Sep 17 00:00:00 2001 From: "martin f. krafft" Date: Wed, 19 Dec 2018 12:42:23 +0100 Subject: [PATCH] improved handling of attachments with spaces in filenames --- .mutt/bgrun | 27 ++++++++++++++++++++------- .mutt/mailcap.backgrounding | 4 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/.mutt/bgrun b/.mutt/bgrun index 6e16630..4dcd3e2 100755 --- a/.mutt/bgrun +++ b/.mutt/bgrun @@ -37,21 +37,34 @@ launch_viewer() { run-mailcap --action=view "$1":"$2" > output.stdout 2> output.stderr } -MIMETYPE="$1" -TEMPFILE=$(tempfile -d . -p mutt -s $(guess_extension "$MIMETYPE")) +MIMETYPE="$1"; shift + +get_file() { + local t + if [ -z "$1" ]; then + t=$(tempfile -d . -p mutt -s $(guess_extension "$MIMETYPE")) + cat > "$t" + echo "$t" + else + t="$(echo ${1##*/} | sed -re 's![^[:alnum:],.:@%^+=_-]!_!gi')" + cp "$1" "$t" + echo "$t" + fi +} case "$SELF" in (bgrun) # make a copy of the file, then launch a shell process in the background # to divert to run-mailcap, after which the temporary directory gets # cleaned up. - cat > "$TEMPFILE" + FILE="$(get_file "${1:-}")" ( - launch_viewer "$MIMETYPE" "$TEMPFILE" + launch_viewer "$MIMETYPE" "$FILE" if [ -s "$TMPDIR/output.stdout" ] || [ -s "$TMPDIR/output.stderr" ]; then notify $TMPDIR/output.stdout $TMPDIR/output.stderr \ "Output from mutt/$SELF on $BASENAME" fi + sleep 1 cleanup ) & trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 @@ -60,10 +73,10 @@ case "$SELF" in # hack to stay around until the viewer has read the file: make a fifo and # wait for the cat process to finish writing to it, which means that it # must have been consumed on the other end. - cat > "$TEMPFILE" - FIFO="${TEMPFILE%/*}/fifo-${TEMPFILE##*/}" + FILE="$(get_file "${1:-}")" + FIFO="${FILE%/*}/fifo-${FILE##*/}" mkfifo "$FIFO" - cat "$TEMPFILE" > "$FIFO" & + cat "$FILE" > "$FIFO" & # For some reason, we do have to write a tempfile and cannot seem to # redirect stdin directly to the fifo, i.e. this does not work instead of # the previous three lines: diff --git a/.mutt/mailcap.backgrounding b/.mutt/mailcap.backgrounding index 3e12f18..c7fc895 100644 --- a/.mutt/mailcap.backgrounding +++ b/.mutt/mailcap.backgrounding @@ -2,6 +2,6 @@ # Mutt mailcap for backgrounding text/html; ~/.mutt/bgrun-fifo %t; description=Open file in browser via FIFO -application/*; ~/.mutt/bgrun %t; description=Backgrounded run of run-mailcap -image/*; ~/.mutt/bgrun %t; description=Backgrounded run of run-mailcap +application/*; ~/.mutt/bgrun %t %s; description=Backgrounded run of run-mailcap +image/*; ~/.mutt/bgrun %t %s; description=Backgrounded run of run-mailcap #multipart/related; ~/.mutt/viewmailattachments; description=Backgrounded loading of HTML message with related parts -- 2.39.5