summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDLFW <daniel@llin.info>2023-05-07 22:56:04 +0200
committerGitHub <noreply@github.com>2023-05-07 16:56:04 -0400
commit95d304fb04a87fbb2534759177f6cd27f5816143 (patch)
tree996bb5542be873c5208aaab10696278d3c5507af
parentdaf25df2692d2aa910af87886061beb0107fd8f1 (diff)
Cleanup preview.sh template (#285)
* 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
-rwxr-xr-xconfig/preview_file.sh190
-rw-r--r--src/preview/preview_file.rs10
2 files changed, 73 insertions, 127 deletions
diff --git a/config/preview_file.sh b/config/preview_file.sh
index d0d92d8..368ea3b 100755
--- a/config/preview_file.sh
+++ b/config/preview_file.sh
@@ -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
@@ -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}"
@@ -181,7 +139,7 @@ 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)
@@ -189,13 +147,16 @@ handle_mime() {
## 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
@@ -203,7 +164,7 @@ handle_mime() {
## 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
@@ -211,40 +172,35 @@ handle_mime() {
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
diff --git a/src/preview/preview_file.rs b/src/preview/preview_file.rs
index 05f389e..d115480 100644
--- a/src/preview/preview_file.rs
+++ b/src/preview/preview_file.rs
@@ -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
@@ -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) => {