X-Git-Url: https://git.madduck.net/etc/mutt.git/blobdiff_plain/d8791352005e2aaed098b93614aa10df241c4e15..5ff3e521154fb1eb6e3302ac39562e865574359d:/.mutt/bgrun?ds=sidebyside diff --git a/.mutt/bgrun b/.mutt/bgrun index 4dcd3e2..56c26e5 100755 --- a/.mutt/bgrun +++ b/.mutt/bgrun @@ -9,7 +9,14 @@ elif [ -d "${TMPDIR}/volatile" ]; then fi export TMPDIR TMPDIR=$(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX) -cleanup() { cd / && rm -rf "$TMPDIR"; } + +cleanup() { + cd / + echo Cleaning up $TMPDIR… >> $TMPDIR/output.stderr + notify_output + rm -rf "$TMPDIR" + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 +} trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 cd "$TMPDIR" @@ -29,6 +36,13 @@ notify() { fi } +notify_output() { + if [ -s "$TMPDIR/output.stdout" ] || [ -s "$TMPDIR/output.stderr" ]; then + notify $TMPDIR/output.stdout $TMPDIR/output.stderr \ + "Output from mutt/$SELF on $BASENAME" + fi +} + guess_extension() { python -c "import mimetypes; print(mimetypes.guess_extension('$1'))" } @@ -46,7 +60,7 @@ get_file() { cat > "$t" echo "$t" else - t="$(echo ${1##*/} | sed -re 's![^[:alnum:],.:@%^+=_-]!_!gi')" + t="$(echo ${1##*/} | sed -re 's![^[:alnum:],.@%^+=_-]!_!gi')" cp "$1" "$t" echo "$t" fi @@ -60,10 +74,6 @@ case "$SELF" in FILE="$(get_file "${1:-}")" ( 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 ) & @@ -85,4 +95,18 @@ case "$SELF" in wait cleanup ;; + (bgrun-delay) + # hack to stay around for a fixed period of time after the viewer process + # returns control to the caller, so that we can clean up. This is for + # cases when the FIFO method doesn't work, because e.g. Firefox randomly + # chooses it needs to read HTML files twice. + FILE="$(get_file "${1:-}")" + (launch_viewer "$MIMETYPE" "${FILE}") & + ( + sleep 1m + echo Cleaning up $TMPDIR… > $TMPDIR/output.stderr + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; esac