#!/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