- #!/usr/bin/env sh
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- GUI="${GUI:-0}"
-
- set -euf -o noclobber -o noglob -o nounset
- IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}"
-
- PATH=$PATH:"${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins"
- IMAGE_CACHE_PATH="$(dirname "$1")"/.thumbs
-
- FPATH="$1"
- FNAME=$(basename "$1")
- EDITOR="${VISUAL:-${EDITOR:-vi}}"
- PAGER="${PAGER:-less -R}"
- ext="${FNAME##*.}"
- if [ -n "$ext" ]; then
- ext="$(printf "%s" "${ext}" | tr '[:upper:]' '[:lower:]')"
- fi
-
- is_mac() {
- uname | grep -q "Darwin"
- }
-
- handle_pdf() {
- if [ "$GUI" -ne 0 ] && is_mac; then
- nohup open "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif [ "$GUI" -ne 0 ] && which zathura >/dev/null 2>&1; then
- nohup zathura "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif which pdftotext >/dev/null 2>&1; then
-
- pdftotext -l 10 -nopgbrk -q -- "${FPATH}" - | eval "$PAGER"
- exit 0
- elif which mutool >/dev/null 2>&1; then
- mutool draw -F txt -i -- "${FPATH}" 1-10 | eval "$PAGER"
- exit 0
- elif which exiftool >/dev/null 2>&1; then
- exiftool "${FPATH}" | eval "$PAGER"
- exit 0
- fi
- }
-
- handle_audio() {
- if which mocp >/dev/null 2>&1 && which mocplay >/dev/null 2>&1; then
- mocplay "${FPATH}" "opener" >/dev/null 2>&1
- exit 0
- elif which mpv >/dev/null 2>&1; then
- mpv "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif which media_client >/dev/null 2>&1; then
- media_client play "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif which mediainfo >/dev/null 2>&1; then
- mediainfo "${FPATH}" | eval "$PAGER"
- exit 0
- elif which exiftool >/dev/null 2>&1; then
- exiftool "${FPATH}"| eval "$PAGER"
- exit 0
- fi
- }
-
- handle_video() {
- if [ "$GUI" -ne 0 ] && is_mac; then
- nohup open "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif [ "$GUI" -ne 0 ] && which smplayer >/dev/null 2>&1; then
- nohup smplayer "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif [ "$GUI" -ne 0 ] && which mpv >/dev/null 2>&1; then
- nohup mpv "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif which ffmpegthumbnailer >/dev/null 2>&1; then
-
- [ -d "${IMAGE_CACHE_PATH}" ] || mkdir "${IMAGE_CACHE_PATH}"
- ffmpegthumbnailer -i "${FPATH}" -o "${IMAGE_CACHE_PATH}/${FNAME}.jpg" -s 0
- viu -n "${IMAGE_CACHE_PATH}/${FNAME}.jpg" | eval "$PAGER"
- exit 0
- elif which mediainfo >/dev/null 2>&1; then
- mediainfo "${FPATH}" | eval "$PAGER"
- exit 0
- elif which exiftool >/dev/null 2>&1; then
- exiftool "${FPATH}"| eval "$PAGER"
- exit 0
- fi
- }
-
-
- handle_extension() {
- case "${ext}" in
-
- a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
- rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
- if which atool >/dev/null 2>&1; then
- atool --list -- "${FPATH}" | eval "$PAGER"
- exit 0
- elif which bsdtar >/dev/null 2>&1; then
- bsdtar --list --file "${FPATH}" | eval "$PAGER"
- exit 0
- fi
- exit 1;;
- rar)
- if which unrar >/dev/null 2>&1; then
-
- unrar lt -p- -- "${FPATH}" | eval "$PAGER"
- fi
- exit 1;;
- 7z)
- if which 7z >/dev/null 2>&1; then
-
- 7z l -p -- "${FPATH}" | eval "$PAGER"
- exit 0
- fi
- exit 1;;
-
-
- pdf)
- handle_pdf
- exit 1;;
-
-
- aac|flac|m4a|mid|midi|mpa|mp2|mp3|ogg|wav|wma)
- handle_audio
- exit 1;;
-
-
- avi|mkv|mp4)
- handle_video
- exit 1;;
-
-
- log)
- "$EDITOR" "${FPATH}"
- exit 0;;
-
-
- torrent)
- if which rtorrent >/dev/null 2>&1; then
- rtorrent "${FPATH}"
- exit 0
- elif which transmission-show >/dev/null 2>&1; then
- transmission-show -- "${FPATH}"
- exit 0
- fi
- exit 1;;
-
-
- odt|ods|odp|sxw)
- if which odt2txt >/dev/null 2>&1; then
-
- odt2txt "${FPATH}" | eval "$PAGER"
- exit 0
- fi
- exit 1;;
-
-
- md)
- if which glow >/dev/null 2>&1; then
- glow -sdark "${FPATH}" | eval "$PAGER"
- exit 0
- elif which lowdown >/dev/null 2>&1; then
- lowdown -Tterm "${FPATH}" | eval "$PAGER"
- exit 0
- fi
- ;;
-
-
- htm|html|xhtml)
-
- if which w3m >/dev/null 2>&1; then
- w3m -dump "${FPATH}" | eval "$PAGER"
- exit 0
- elif which lynx >/dev/null 2>&1; then
- lynx -dump -- "${FPATH}" | eval "$PAGER"
- exit 0
- elif which elinks >/dev/null 2>&1; then
- elinks -dump "${FPATH}" | eval "$PAGER"
- exit 0
- fi
- ;;
-
-
- json)
- if which jq >/dev/null 2>&1; then
- jq --color-output . "${FPATH}" | eval "$PAGER"
- exit 0
- elif which python >/dev/null 2>&1; then
- python -m json.tool -- "${FPATH}" | eval "$PAGER"
- exit 0
- fi
- ;;
- esac
- }
-
- abspath() {
- case "$1" in
- /*) printf "%s\n" "$1";;
- *) printf "%s\n" "$PWD/$1";;
- esac
- }
-
- listimages() {
- find -L "$(dirname "$target")" -maxdepth 1 -type f -iregex \
- '.*\(jpe?g\|bmp\|webp\|png\|gif\)$' -print0 | sort -z
- }
-
- load_dir() {
- target="$(abspath "$2")"
- count="$(listimages | grep -a -m 1 -ZznF "$target" | cut -d: -f1)"
-
- if [ -n "$count" ]; then
- if [ "$GUI" -ne 0 ]; then
- listimages | xargs -0 nohup "$1" -n "$count" --
- else
- listimages | xargs -0 "$1" -n "$count" --
- fi
- else
- shift
- "$1" -- "$@"
- fi
- }
-
- handle_multimedia() {
-
-
-
-
-
-
- mimetype="${1}"
- case "${mimetype}" in
-
-
-
-
-
-
-
-
-
-
-
-
- image/*)
- if [ "$GUI" -ne 0 ] && is_mac; then
- nohup open "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif [ "$GUI" -ne 0 ] && which imvr >/dev/null 2>&1; then
- load_dir imvr "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif [ "$GUI" -ne 0 ] && which sxiv >/dev/null 2>&1; then
- load_dir sxiv "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif which viu >/dev/null 2>&1; then
- viu -n "${FPATH}" | eval "$PAGER"
- exit 0
- elif which img2txt >/dev/null 2>&1; then
- img2txt --gamma=0.6 -- "${FPATH}" | eval "$PAGER"
- exit 0
- elif which exiftool >/dev/null 2>&1; then
- exiftool "${FPATH}" | eval "$PAGER"
- exit 0
- fi
-
-
-
-
-
-
-
-
-
-
-
- exit 7;;
-
-
- application/pdf)
- handle_pdf
- exit 1;;
-
-
- audio/*)
- handle_audio
- exit 1;;
-
-
- video/*)
- handle_video
- exit 1;;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- esac
- }
-
- handle_mime() {
- mimetype="${1}"
- case "${mimetype}" in
-
- text/troff)
- man -l "${FPATH}"
- exit 0;;
-
-
- text/* | */xml)
- "$EDITOR" "${FPATH}"
- exit 0;;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- image/vnd.djvu)
- if which djvutxt >/dev/null 2>&1; then
-
- djvutxt "${FPATH}" | eval "$PAGER"
- exit 0
- elif which exiftool >/dev/null 2>&1; then
- exiftool "${FPATH}" | eval "$PAGER"
- exit 0
- fi
- exit 1;;
- esac
- }
-
- handle_fallback() {
- if [ "$GUI" -ne 0 ] && which xdg-open >/dev/null 2>&1; then
- nohup xdg-open "${FPATH}" >/dev/null 2>&1 &
- exit 0
- elif [ "$GUI" -ne 0 ] && which open >/dev/null 2>&1; then
- nohup open "${FPATH}" >/dev/null 2>&1 &
- exit 0
- fi
-
- echo '----- File details -----' && file --dereference --brief -- "${FPATH}"
- exit 1
- }
-
- handle_blocked() {
- case "${MIMETYPE}" in
- application/x-sharedlib)
- exit 0;;
-
- application/x-shared-library-la)
- exit 0;;
-
- application/x-executable)
- exit 0;;
-
- application/x-shellscript)
- exit 0;;
-
- application/octet-stream)
- exit 0;;
- esac
- }
-
- MIMETYPE="$( file --dereference --brief --mime-type -- "${FPATH}" )"
- handle_extension
- handle_multimedia "${MIMETYPE}"
- handle_mime "${MIMETYPE}"
- handle_blocked "${MIMETYPE}"
- handle_fallback
-
- exit 1
|