stripes/lfview

100 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
set -C -f -u
IFS="$(printf '%b_' '\n')"
IFS="${IFS%_}"
# ANSI color codes are supported.
# STDIN is disabled, so interactive scripts won't work properly
# This script is considered a configuration file and must be updated manually.
# Meanings of exit codes:
# code | meaning | action of ranger
# -----+------------+-------------------------------------------
# 0 | success | Display stdout as preview
# 1 | no preview | Display no preview at all
# 2 | plain text | Display the plain content of the file
# Script arguments
FILE_PATH="${1}" # Full path of the highlighted file
FILE_EXTENSION="${FILE_PATH##*.}"
FILE_EXTENSION_LOWER=$(echo "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')
handle_extension() {
case "${FILE_EXTENSION_LOWER}" 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 | tZ | tzo | war | xpi | xz | Z | zip)
unzip -l -- "${FILE_PATH}"
tar --list --file "${FILE_PATH}"
exit 1
;;
rar)
# Avoid password prompt by providing empty password
unrar lt -p- -- "${FILE_PATH}"
exit 1
;;
7z)
# Avoid password prompt by providing empty password
7z l -p -- "${FILE_PATH}"
exit 1
;;
# PDF
pdf)
# Preview as text conversion
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" -
exiftool "${FILE_PATH}"
exit 1
;;
# BitTorrent
torrent)
transmission-show -- "${FILE_PATH}"
exit 1
;;
# HTML
htm | html | xhtml)
# Preview as text conversion
lynx -dump -nonumbers -nolist -- "${FILE_PATH}"
elinks -dump 1 -no-references -no-numbering <"${FILE_PATH}"
;; # Continue with next handler on failure
# JSON
json)
jq --color-output . "${FILE_PATH}" && exit 5
python -m json.tool -- "${FILE_PATH}" && exit 5
;;
esac
}
handle_mime() {
local mimetype="${1}"
case "${mimetype}" in
text/html) lynx -dump "${FILE_PATH}" ;;
text/troff) man ./ "${FILE_PATH}" | col -b ;;
text/* | */xml)
bat --color always --style plain --paging never -- "${FILE_PATH}"
exit 2
;;
application/zip) unzip -l -- "${FILE_PATH}" ;;
image/*) exiftool "${FILE_PATH}" || exit 1 ;;
video/* | audio/* | application/octet-stream) mediainfo "${FILE_PATH}" || exit 1 ;;
*/pdf) pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - ;;
esac
}
handle_fallback() {
echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}"
exit 1
}
MIMETYPE="$(file --dereference --brief --mime-type -- "${FILE_PATH}")"
handle_extension
handle_mime "${MIMETYPE}"
handle_fallback
exit 1