--- /dev/null
+#!/bin/sh
+
+SELF="${0##*/}"
+
+if [ -z "$TMPDIR" ]; then
+ TMPDIR=/tmp
+elif [ -d "${TMPDIR}/volatile" ]; then
+ TMPDIR="${TMPDIR}/volatile"
+fi
+export TMPDIR
+TMPDIR=$(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX)
+trap "rm -rf '$TMPDIR'" 1 2 3 4 5 6 7 8 10 11 12 13 14 15
+
+BASENAME="${1##*/}"
+TEMPFILE="${TMPDIR}/${BASENAME}"
+
+notify() {
+ if [ -x "$(command -v awesome-client)" ]; then
+ awesome-client <<-_eof
+ local naughty = require("naughty")
+ naughty.notify({ preset = naughty.config.presets.low,
+ title = "$3",
+ text = [[stdout:
+ $(sed -e 's,\",\\\",g' "$1")
+ stderr:
+ $(sed -e 's,\",\\\",g' "$2")]]
+ })
+ _eof
+ 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.
+ cp -a "$1" $TMPDIR
+ MIMETYPE="$2"
+ (
+ run-mailcap --action=view "$MIMETYPE":"$TEMPFILE"
+ rm -rf "$TMPDIR"
+ if [ -s "$TMPDIR/output.stdout" ] || [ -s "$TMPDIR/output.stderr" ]; then
+ notify $TMPDIR/output.stdout $TMPDIR/output.stderr \
+ "Output from mutt/$SELF on $BASENAME"
+ fi
+ ) &
+ trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15
+ ;;
+ (browserrun)
+ # 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
+ wait
+ ;;
+esac
+