Skip to content

Commit

Permalink
Cleanup preview.sh template (#285)
Browse files Browse the repository at this point in the history
* Cleanup preview.sh template

Removed ranger residuals and dead code from the preview.sh script and
the logic that invokes it.

* Remove --[x/y]-coord arguments
  • Loading branch information
DLFW committed May 7, 2023
1 parent daf25df commit 95d304f
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 127 deletions.
190 changes: 73 additions & 117 deletions config/preview_file.sh
Original file line number Diff line number Diff line change
@@ -1,40 +1,45 @@
#!/usr/bin/env bash

set -o noclobber -o noglob -o nounset -o pipefail
IFS=$'\n'

## If the option `use_preview_script` is set to `true`,
## then this script will be called and its output will be displayed in ranger.
## ANSI color codes are supported.
## STDIN is disabled, so interactive scripts won't work properly

## This script is a template script for creating textual file previews in Joshuto.
##
## Copy this script to your Joshuto configuration directory and refer to this
## script in `joshuto.toml` in the `[preview]` section like
## ```
## preview_script = "~/.config/joshuto/preview_file.sh"
## ```
## Joshuto will call this script for each file when first hovered by the cursor.
## If this script returns with an exit code 0, the stdout of this script will be
## the file's preview text in Joshuto's right panel.
## The preview text will be cached by Joshuto and only renewed on reload.
## ANSI color codes are supported if Joshuto is build with the `syntax_highlight`
## feature.
##
## This script is considered a configuration file and must be updated manually.
## It will be left untouched if you upgrade ranger.

## Because of some automated testing we do on the script #'s for comments need
## to be doubled up. Code that is commented out, because it's an alternative for
## example, gets only one #.

## It will be left untouched if you upgrade Joshuto.
##
## 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
## 3 | fix width | Don't reload when width changes
## 4 | fix height | Don't reload when height changes
## 5 | fix both | Don't ever reload
## 6 | image | Display the image `$IMAGE_CACHE_PATH` points to as an image preview
## 7 | image | Display the file directly as an image
##
## This script is used only as a provider for textual previews.
## Image previews are independent from this script.
##

IFS=$'\n'

# Security measures:
# * noclobber prevents you from overwriting a file with `>`
# * noglob prevents expansion of wild cards
# * nounset causes bash to fail if an undeclared variable is used (e.g. typos)
# * pipefail causes a pipeline to fail also if a command other than the last one fails
set -o noclobber -o noglob -o nounset -o pipefail

FILE_PATH=""
PREVIEW_WIDTH=10
PREVIEW_HEIGHT=10
PREVIEW_X_COORD=0
PREVIEW_Y_COORD=0
IMAGE_CACHE_PATH=""

# echo "$@"

while [ "$#" -gt 0 ]; do
case "$1" in
Expand All @@ -50,128 +55,81 @@ while [ "$#" -gt 0 ]; do
shift
PREVIEW_HEIGHT="$1"
;;
"--x-coord")
shift
PREVIEW_X_COORD="$1"
;;
"--y-coord")
shift
PREVIEW_Y_COORD="$1"
;;
"--image-cache")
shift
IMAGE_CACHE_PATH="$1"
;;
esac
shift
done

FILE_EXTENSION="${FILE_PATH##*.}"
FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')"

MIMETYPE=$(file --mime-type -Lb "${FILE_PATH}")

## Settings
HIGHLIGHT_SIZE_MAX=262143 # 256KiB
HIGHLIGHT_TABWIDTH="${HIGHLIGHT_TABWIDTH:-8}"
HIGHLIGHT_STYLE="${HIGHLIGHT_STYLE:-pablo}"
HIGHLIGHT_OPTIONS="--replace-tabs=${HIGHLIGHT_TABWIDTH} --style=${HIGHLIGHT_STYLE} ${HIGHLIGHT_OPTIONS:-}"
PYGMENTIZE_STYLE="${PYGMENTIZE_STYLE:-autumn}"
OPENSCAD_IMGSIZE="${RNGR_OPENSCAD_IMGSIZE:-1000,1000}"
OPENSCAD_COLORSCHEME="${RNGR_OPENSCAD_COLORSCHEME:-Tomorrow Night}"

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)
atool --list -- "${FILE_PATH}" && exit 5
bsdtar --list --file "${FILE_PATH}" && exit 5
atool --list -- "${FILE_PATH}" && exit 0
bsdtar --list --file "${FILE_PATH}" && exit 0
exit 1;;
rar)
## Avoid password prompt by providing empty password
unrar lt -p- -- "${FILE_PATH}" && exit 5
unrar lt -p- -- "${FILE_PATH}" && exit 0
exit 1;;
7z)
## Avoid password prompt by providing empty password
7z l -p -- "${FILE_PATH}" && exit 5
7z l -p -- "${FILE_PATH}" && exit 0
exit 1;;

## PDF
## pdf)
pdf)
## Preview as text conversion
## pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
## fmt -w "${PREVIEW_WIDTH}" && exit 5
## mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
## fmt -w "${PREVIEW_WIDTH}" && exit 5
## exiftool "${FILE_PATH}" && exit 5
## exit 1;;
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
fmt -w "${PREVIEW_WIDTH}" && exit 0
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
fmt -w "${PREVIEW_WIDTH}" && exit 0
exiftool "${FILE_PATH}" && exit 0
exit 1;;

## BitTorrent
torrent)
transmission-show -- "${FILE_PATH}" && exit 5
transmission-show -- "${FILE_PATH}" && exit 0
exit 1;;

## OpenDocument
odt|ods|odp|sxw)
## Preview as text conversion
odt2txt "${FILE_PATH}" && exit 5
odt2txt "${FILE_PATH}" && exit 0
## Preview as markdown conversion
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
pandoc -s -t markdown -- "${FILE_PATH}" && exit 0
exit 1;;

## XLSX
xlsx)
## Preview as csv conversion
## Uses: https://github.com/dilshod/xlsx2csv
xlsx2csv -- "${FILE_PATH}" && exit 5
xlsx2csv -- "${FILE_PATH}" && exit 0
exit 1;;

## HTML
htm|html|xhtml)
## Preview as text conversion
w3m -dump "${FILE_PATH}" && exit 5
lynx -dump -- "${FILE_PATH}" && exit 5
elinks -dump "${FILE_PATH}" && exit 5
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
w3m -dump "${FILE_PATH}" && exit 0
lynx -dump -- "${FILE_PATH}" && exit 0
elinks -dump "${FILE_PATH}" && exit 0
pandoc -s -t markdown -- "${FILE_PATH}" && exit 0
;;

## JSON
json|ipynb)
jq --color-output . "${FILE_PATH}" && exit 5
python -m json.tool -- "${FILE_PATH}" && exit 5
jq --color-output . "${FILE_PATH}" && exit 0
python -m json.tool -- "${FILE_PATH}" && exit 0
;;

## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected
## by file(1).
dff|dsf|wv|wvc)
mediainfo "${FILE_PATH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
mediainfo "${FILE_PATH}" && exit 0
exiftool "${FILE_PATH}" && exit 0
;; # Continue with next handler on failure
esac
}

handle_image() {
## Size of the preview if there are multiple options or it has to be
## rendered from vector graphics. If the conversion program allows
## specifying only one dimension while keeping the aspect ratio, the width
## will be used.
local DEFAULT_SIZE="40x30"

local mimetype="${1}"
case "${mimetype}" in
## Image
image/*)
# kitty +kitten icat --clear
kitty +kitten icat \
--transfer-mode file \
--place "${PREVIEW_WIDTH}x${PREVIEW_HEIGHT}@${PREVIEW_X_COORD}x${PREVIEW_Y_COORD}" \
"${FILE_PATH}"
exit 7
;;
esac
}

handle_mime() {
local mimetype="${1}"

Expand All @@ -181,70 +139,68 @@ handle_mime() {
## Preview as text conversion
## note: catdoc does not always work for .doc files
## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/
catdoc -- "${FILE_PATH}" && exit 5
catdoc -- "${FILE_PATH}" && exit 0
exit 1;;

## DOCX, ePub, FB2 (using markdown)
## You might want to remove "|epub" and/or "|fb2" below if you have
## uncommented other methods to preview those formats
*wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml)
## Preview as markdown conversion
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
pandoc -s -t markdown -- "${FILE_PATH}" | bat -l markdown \
--color=always --paging=never \
--style=plain \
--terminal-width="${PREVIEW_WIDTH}" && exit 0
exit 1;;

## E-mails
message/rfc822)
## Parsing performed by mu: https://github.com/djcb/mu
mu view -- "${FILE_PATH}" && exit 5
mu view -- "${FILE_PATH}" && exit 0
exit 1;;

## XLS
*ms-excel)
## Preview as csv conversion
## xls2csv comes with catdoc:
## http://www.wagner.pp.ru/~vitus/software/catdoc/
xls2csv -- "${FILE_PATH}" && exit 5
xls2csv -- "${FILE_PATH}" && exit 0
exit 1;;

## Text
text/* | */xml)
bat --color=always --paging=never \
--style=plain \
--terminal-width="${PREVIEW_WIDTH}" \
"${FILE_PATH}" && exit 5
exit 2;;
"${FILE_PATH}" && exit 0
cat "${FILE_PATH}" && exit 0
exit 1;;

## DjVu
image/vnd.djvu)
## Preview as text conversion (requires djvulibre)
djvutxt "${FILE_PATH}" | fmt -w "${PREVIEW_WIDTH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
djvutxt "${FILE_PATH}" | fmt -w "${PREVIEW_WIDTH}" && exit 0
exiftool "${FILE_PATH}" && exit 0
exit 1;;

## Image
image/*)
## Preview as text conversion
# img2txt --gamma=0.6 --width="${PREVIEW_WIDTH}" -- "${FILE_PATH}" && exit 4
exiftool "${FILE_PATH}" && exit 5
exiftool "${FILE_PATH}" && exit 0
exit 1;;

## Video and audio
## video/* | audio/*)
## mediainfo "${FILE_PATH}" && exit 5
## exiftool "${FILE_PATH}" && exit 5
## exit 1;;
video/* | audio/*)
mediainfo "${FILE_PATH}" && exit 0
exiftool "${FILE_PATH}" && exit 0
exit 1;;
esac
}

handle_fallback() {
# echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5
exit 1
}


MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
FILE_EXTENSION="${FILE_PATH##*.}"
FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')"
handle_extension
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
handle_mime "${MIMETYPE}"
handle_fallback

exit 1
10 changes: 0 additions & 10 deletions src/preview/preview_file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,11 @@ impl Background {
let layout_rect = layout[2];
let preview_width = layout_rect.width;
let preview_height = layout_rect.height;
let preview_x_coord = layout_rect.x;
let preview_y_coord = layout_rect.y;

if preview_width == 0 || preview_height == 0 {
return;
}

let image_cache = 0;

let script = script.clone();
let event_tx = context.clone_event_tx();
context
Expand All @@ -92,12 +88,6 @@ impl Background {
.arg(preview_width.to_string())
.arg("--preview-height")
.arg(preview_height.to_string())
.arg("--x-coord")
.arg(preview_x_coord.to_string())
.arg("--y-coord")
.arg(preview_y_coord.to_string())
.arg("--image-cache")
.arg(image_cache.to_string())
.output();
match res {
Ok(output) => {
Expand Down

0 comments on commit 95d304f

Please sign in to comment.