- #!/usr/bin/env bash
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XDOTOOL_TIMEOUT=2
- PAGER=${PAGER:-"vim -R"}
- NUKE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
-
-
- if which xterm >/dev/null 2>&1 ; then
- TERMINAL="xterm -into"
- elif which urxvt >/dev/null 2>&1 ; then
- TERMINAL="urxvt -embed"
- elif which st >/dev/null 2>&1 ; then
- TERMINAL="st -w"
- else
- echo "No xembed term found" >&2
- fi
-
-
- term_nuke () {
-
- $TERMINAL "$1" -e "$NUKE" "$2" &
- }
-
- start_tabbed () {
- FIFO="$(mktemp -u)"
- mkfifo "$FIFO"
-
- tabbed > "$FIFO" &
-
- jobs
-
- TABBEDPID="$(jobs -p %%)"
-
- if [ -z "$TABBEDPID" ] ; then
- echo "Can't start tabbed"
- exit 1
- fi
-
- read -r XID < "$FIFO"
-
- rm "$FIFO"
- }
-
- get_viewer_pid () {
- VIEWERPID="$(jobs -p %%)"
- }
-
- kill_viewer () {
- if [ -n "$VIEWERPID" ] && jobs -p | grep "$VIEWERPID" ; then
- kill "$VIEWERPID"
- fi
- }
-
- sigint_kill () {
- kill_viewer
- kill "$TABBEDPID"
- exit 0
- }
-
- previewer_loop () {
- unset -v NNN_FIFO
-
- exec >/dev/null 2>&1
-
- MAINWINDOW="$(xdotool getactivewindow)"
-
- start_tabbed
- trap sigint_kill SIGINT
-
- xdotool windowactivate "$MAINWINDOW"
-
-
-
-
-
-
-
- while read -r FILE ; do
-
- jobs
-
- if ! jobs | grep tabbed ; then
- break
- fi
-
- if [ ! -e "$FILE" ] ; then
- continue
- fi
-
- kill_viewer
-
- MIME="$(file -b --mime-type "$FILE")"
-
- case "$MIME" in
- video/*)
- if which mpv >/dev/null 2>&1 ; then
- mpv --force-window=immediate --loop-file --wid="$XID" "$FILE" &
- else
- term_nuke "$XID" "$FILE"
- fi
- ;;
- audio/*)
- if which mpv >/dev/null 2>&1 ; then
- mpv --force-window=immediate --loop-file --wid="$XID" "$FILE" &
- else
- term_nuke "$XID" "$FILE"
- fi
- ;;
- image/*)
- if which sxiv >/dev/null 2>&1 ; then
- sxiv -e "$XID" "$FILE" &
- else
- term_nuke "$XID" "$FILE"
- fi
- ;;
- application/pdf)
- if which zathura >/dev/null 2>&1 ; then
- zathura -e "$XID" "$FILE" &
- else
- term_nuke "$XID" "$FILE"
- fi
- ;;
- inode/directory)
- $TERMINAL "$XID" -e nnn "$FILE" &
- ;;
- text/*)
- if [ -x "$NUKE" ] ; then
- term_nuke "$XID" "$FILE"
- else
-
- $TERMINAL "$XID" -e $PAGER "$FILE" &
- fi
- ;;
- *)
- if [ -x "$NUKE" ] ; then
- term_nuke "$XID" "$FILE"
- else
- $TERMINAL "$XID" -e sh -c "file '$FILE' | $PAGER -" &
- fi
- ;;
- esac
- get_viewer_pid
-
-
- ACTIVE_XID="$(xdotool getactivewindow)"
- if [ $((ACTIVE_XID == XID)) -ne 0 ] ; then
- xdotool windowactivate "$MAINWINDOW"
- else
- timeout "$XDOTOOL_TIMEOUT" xdotool behave "$XID" focus windowactivate "$MAINWINDOW" &
- fi
- done
- kill "$TABBEDPID"
- kill_viewer
- }
-
- if [ ! -r "$NNN_FIFO" ] ; then
- echo "Can't read \$NNN_FIFO ('$NNN_FIFO')"
- exit 1
- fi
-
- previewer_loop < "$NNN_FIFO" &
- disown
|