X-Git-Url: https://git.madduck.net/etc/mutt.git/blobdiff_plain/76227d1c302ee76d82c037e923c70edc61fd5aea..4a7266651c7f1575953c50257a3bb3d2c4bf9490:/.mutt/bgrun diff --git a/.mutt/bgrun b/.mutt/bgrun index e0bcd20..6e16630 100755 --- a/.mutt/bgrun +++ b/.mutt/bgrun @@ -9,10 +9,10 @@ elif [ -d "${TMPDIR}/volatile" ]; then 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 +cleanup() { cd / && rm -rf "$TMPDIR"; } +trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 -BASENAME="${1##*/}" -TEMPFILE="${TMPDIR}/${BASENAME}" +cd "$TMPDIR" notify() { if [ -x "$(command -v awesome-client)" ]; then @@ -29,32 +29,47 @@ 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 +} + +MIMETYPE="$1" +TEMPFILE=$(tempfile -d . -p mutt -s $(guess_extension "$MIMETYPE")) + 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" + cat > "$TEMPFILE" ( - run-mailcap --action=view "$MIMETYPE":"$TEMPFILE" - rm -rf "$TMPDIR" + 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" fi + cleanup ) & 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 + (bgrun-fifo) + # 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. - mkfifo "$TEMPFILE" - INPUTFILE="$1" - cat "$INPUTFILE" > $TEMPFILE & - sensible-browser "$TEMPFILE" > $TMPDIR/output.stdout 2> $TMPDIR/output.stderr + cat > "$TEMPFILE" + FIFO="${TEMPFILE%/*}/fifo-${TEMPFILE##*/}" + mkfifo "$FIFO" + cat "$TEMPFILE" > "$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: + ## cat > "$FIFO" & + launch_viewer "$MIMETYPE" "${FIFO}" wait + cleanup ;; esac -