100 lines
2.5 KiB
Bash
Executable File
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
|