From: martin f. krafft Date: Mon, 13 Aug 2018 23:17:04 +0000 (+1200) Subject: Handle attachments via stdin X-Git-Url: https://git.madduck.net/etc/mutt.git/commitdiff_plain/c58983ebed266f916914bd736dfbf7b03eb35eb0?ds=inline Handle attachments via stdin --- diff --git a/.mutt/bgrun b/.mutt/bgrun index 260925c..937542d 100755 --- a/.mutt/bgrun +++ b/.mutt/bgrun @@ -29,15 +29,24 @@ notify() { fi } +guess_extension() { + python -c "import mimetypes; print(mimetypes.guess_extension('$1'))" +} + +launch_viewer() { + run-mailcap --action=view "$1":"$2" > output.stdout 2> output.stderr +} + 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. - cp -a "$1" $TMPDIR - MIMETYPE="$2" + MIMETYPE="$1" + TEMPFILE=$(tempfile -d . -p mutt -s $(guess_extension "$MIMETYPE")) + cat > "$TEMPFILE" ( - run-mailcap --action=view "$MIMETYPE":"$TEMPFILE" + launch_viewer "$MIMETYPE" "$TEMPFILE" if [ -s "$TMPDIR/output.stdout" ] || [ -s "$TMPDIR/output.stderr" ]; then notify $TMPDIR/output.stdout $TMPDIR/output.stderr \ "Output from mutt/$SELF on $BASENAME" @@ -50,10 +59,15 @@ case "$SELF" in # hack to stay around until the browser 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. - mkfifo "$TEMPFILE" - INPUTFILE="$1" - cat "$INPUTFILE" > $TEMPFILE & - sensible-browser "$TEMPFILE" > $TMPDIR/output.stdout 2> $TMPDIR/output.stderr + mkfifo mutt.html + TEMPFILE=$(tempfile -d . -p mutt -s .html) + cat > "$TEMPFILE" + cat "$TEMPFILE" > mutt.html & + # For some reason, we do have to write a tempfile and cannot seem tu + # redirect stdin directly to the fifo, i.e. this does not work instead of + # the previous three lines: + ## cat > mutt.html & + launch_viewer text/html ${PWD}/mutt.html wait cleanup ;; diff --git a/.mutt/mailcap.backgrounding b/.mutt/mailcap.backgrounding index 37b57ed..0345c30 100644 --- a/.mutt/mailcap.backgrounding +++ b/.mutt/mailcap.backgrounding @@ -1,6 +1,6 @@ # # Mutt mailcap for backgrounding -text/html; ~/.mutt/browserrun %s; description=Open file in browser via FIFO -application/*; ~/.mutt/bgrun %s %t; description=Backgrounded run of run-mailcap -image/*; ~/.mutt/bgrun %s %t; description=Backgrounded run of run-mailcap +text/html; ~/.mutt/browserrun; 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