X-Git-Url: https://git.madduck.net/etc/mutt.git/blobdiff_plain/c58983ebed266f916914bd736dfbf7b03eb35eb0..5d703418aa569e86356fde617d171817023a3c9d:/.mutt/bgrun diff --git a/.mutt/bgrun b/.mutt/bgrun index 937542d..5e30cf0 100755 --- a/.mutt/bgrun +++ b/.mutt/bgrun @@ -37,37 +37,51 @@ launch_viewer() { run-mailcap --action=view "$1":"$2" > output.stdout 2> output.stderr } +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. - MIMETYPE="$1" - TEMPFILE=$(tempfile -d . -p mutt -s $(guess_extension "$MIMETYPE")) - 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 ;; - (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 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 + FILE="$(get_file "${1:-}")" + FIFO="${FILE%/*}/fifo-${FILE##*/}" + mkfifo "$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: - ## cat > mutt.html & - launch_viewer text/html ${PWD}/mutt.html + ## cat > "$FIFO" & + launch_viewer "$MIMETYPE" "${FIFO}" wait cleanup ;;