#!/usr/bin/env sh
|
|
|
|
preview() {
|
|
cat <<-EOF | paste -sd '' >"$LF_UEBERZUG_FIFO"
|
|
{
|
|
"action": "add", "identifier": "lf-preview",
|
|
"path": "$1", "x": $4, "y": $5, "width": $2, "height": $3,
|
|
"scaler": "contain"
|
|
}
|
|
EOF
|
|
}
|
|
|
|
set -C -f -u
|
|
IFS=$'\n'
|
|
|
|
lf-ueberzug-cleaner # clean active preview
|
|
|
|
file="$1"; shift
|
|
|
|
# Settings
|
|
HIGHLIGHT_SIZE_MAX=262143 # 256KiB
|
|
HIGHLIGHT_TABWIDTH=8
|
|
HIGHLIGHT_STYLE='base16/oceanicnext'
|
|
PYGMENTIZE_STYLE='autumn'
|
|
|
|
case "$(basename "$file" | tr '[A-Z]' '[a-z]')" in
|
|
# Archive
|
|
*.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|*.t*.Z|*.tzo|*.war|*.xpi|*.xz|*.Z|*.zip)
|
|
atool --list -- "$file"
|
|
bsdtar --list --file "$file"
|
|
exit 1;;
|
|
*.rar)
|
|
# Avoid password prompt by providing empty password
|
|
unrar lt -p- -- "$file"
|
|
exit 1;;
|
|
*.7z)
|
|
# Avoid password prompt by providing empty password
|
|
7z l -p -- "$file"
|
|
exit 1;;
|
|
|
|
# BitTorrent
|
|
*.torrent)
|
|
transmission-show -- "$file"
|
|
exit 1;;
|
|
|
|
# OpenDocument
|
|
*.odt|*.ods|*.odp|*.sxw)
|
|
# Preview as text conversion
|
|
odt2txt "$file"
|
|
exit 1;;
|
|
|
|
# HTML
|
|
*.htm|*.html|*.xhtml)
|
|
# Preview as text conversion
|
|
w3m -dump "$file"
|
|
lynx -dump -- "$file"
|
|
elinks -dump "$file"
|
|
exit 1;; # Continue with next handler on failure
|
|
*.avi|*.mp4|*.mkv)
|
|
thumbnail="$LF_UEBERZUG_TEMPDIR/thumbnail.png"
|
|
ffmpegthumbnailer -i "$file" -o "$thumbnail" -s 0
|
|
preview "$thumbnail" "$@"
|
|
exit 127;;
|
|
*.pdf)
|
|
thumbnail="$LF_UEBERZUG_TEMPDIR/thumbnail.png"
|
|
gs -o "$thumbnail" -sDEVICE=pngalpha -dLastPage=1 "$file" >/dev/null
|
|
preview "$thumbnail" "$@"
|
|
exit 127;;
|
|
*.jpg|*.jpeg|*.png|*.bmp)
|
|
preview "$file" "$@"
|
|
exit 127;;
|
|
*.svg)
|
|
thumbnail="$LF_UEBERZUG_TEMPDIR/thumbnail.png"
|
|
convert "$file" "$thumbnail"
|
|
preview "$thumbnail" "$@"
|
|
exit 127;;
|
|
esac
|
|
|
|
MIMETYPE="$( file --dereference --brief --mime-type -- "$file" )"
|
|
|
|
case "$MIMETYPE" in
|
|
# Text
|
|
|
|
text/plain)
|
|
cat "$file"
|
|
exit 127;;
|
|
|
|
text/* | */xml)
|
|
# Syntax highlight
|
|
if [ "$( stat --printf='%s' -- "$file" )" -gt "$HIGHLIGHT_SIZE_MAX" ]; then
|
|
exit 2
|
|
fi
|
|
if [ "$( tput colors )" -ge 256 ]; then
|
|
pygmentize_format='terminal256'
|
|
highlight_format='xterm256'
|
|
else
|
|
pygmentize_format='terminal'
|
|
highlight_format='ansi'
|
|
fi
|
|
highlight --replace-tabs="$HIGHLIGHT_TABWIDTH" --out-format="$highlight_format" --style="$HIGHLIGHT_STYLE" --force -- "$file"
|
|
# pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}" -- "$file"
|
|
exit 127;;
|
|
|
|
# Image
|
|
image/*)
|
|
# Preview as text conversion
|
|
# img2txt --gamma=0.6 -- "$file" && exit 1
|
|
exiftool "$file"
|
|
exit 1;;
|
|
|
|
# Video and audio
|
|
video/* | audio/*|application/octet-stream)
|
|
mediainfo "$file"
|
|
exiftool "$file"
|
|
exit 1;;
|
|
esac
|
|
|
|
echo '----- File Type Classification -----' && file --dereference --brief -- "$file"
|
|
exit 1
|
|
|
|
|