mirror of
https://github.com/jarun/nnn.git
synced 2024-11-24 11:51:27 +00:00
cache and constraint preview dimensions (#910)
* cache and constraint preview dimensions * cache subdirectory * optional caching * revert to ext for pdf/epub
This commit is contained in:
parent
638676a689
commit
f90e567a17
|
@ -47,7 +47,7 @@
|
||||||
#
|
#
|
||||||
# $ NNN_FIFO=/tmp/nnn.fifo nnn
|
# $ NNN_FIFO=/tmp/nnn.fifo nnn
|
||||||
#
|
#
|
||||||
# Then in `nnn`, launch the `preview-tui` plugin.
|
# Then in `nnn`, launch the `preview-tui-ext` plugin.
|
||||||
#
|
#
|
||||||
# If you provide the same NNN_FIFO to all nnn instances, there will be a
|
# If you provide the same NNN_FIFO to all nnn instances, there will be a
|
||||||
# single common preview window. If you provide different FIFO path (e.g.
|
# single common preview window. If you provide different FIFO path (e.g.
|
||||||
|
@ -76,6 +76,10 @@ USE_PISTOL="${USE_PISTOL:-0}"
|
||||||
PAGER="${PAGER:-less -P?n -R}"
|
PAGER="${PAGER:-less -P?n -R}"
|
||||||
ARCHIVES="$(echo "$NNN_ARCHIVE" | sed 's/.*(\(.*\)).*/\1/;s/|/ /g')"
|
ARCHIVES="$(echo "$NNN_ARCHIVE" | sed 's/.*(\(.*\)).*/\1/;s/|/ /g')"
|
||||||
TMPDIR="${TMPDIR:-/tmp}"
|
TMPDIR="${TMPDIR:-/tmp}"
|
||||||
|
# Consider setting NNN_PREVIEWDIR to $XDG_CACHE_DIR if you want to keep previews on disk between reboots
|
||||||
|
NNN_PREVIEWDIR="${NNN_PREVIEWDIR:-$TMPDIR}/nnn/previews"
|
||||||
|
NNN_PREVIEWWIDTH="${NNN_PREVIEWWIDTH:-1920}"
|
||||||
|
NNN_PREVIEWHEIGHT="${NNN_PREVIEWHEIGHT:-1080}"
|
||||||
NUMPREVIEWTUI="$(($(find "$TMPDIR" -maxdepth 1 -name 'nnn-preview-tui-pagerpid*' 2>/dev/null | wc -l) + 1))"
|
NUMPREVIEWTUI="$(($(find "$TMPDIR" -maxdepth 1 -name 'nnn-preview-tui-pagerpid*' 2>/dev/null | wc -l) + 1))"
|
||||||
PAGERPID="$TMPDIR/nnn-preview-tui-pagerpid.$NUMPREVIEWTUI"
|
PAGERPID="$TMPDIR/nnn-preview-tui-pagerpid.$NUMPREVIEWTUI"
|
||||||
GIFPID="$TMPDIR/nnn-preview-tui-gifpid.$NUMPREVIEWTUI"
|
GIFPID="$TMPDIR/nnn-preview-tui-gifpid.$NUMPREVIEWTUI"
|
||||||
|
@ -131,7 +135,7 @@ print_bin_info() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
preview_file () {
|
preview_file() {
|
||||||
clear
|
clear
|
||||||
# Trying to use pistol if it's available.
|
# Trying to use pistol if it's available.
|
||||||
if [ "$USE_PISTOL" -ne 0 ] && exists pistol; then
|
if [ "$USE_PISTOL" -ne 0 ] && exists pistol; then
|
||||||
|
@ -168,12 +172,14 @@ preview_file () {
|
||||||
fifo_pager ls --color=always
|
fifo_pager ls --color=always
|
||||||
fi
|
fi
|
||||||
elif [ "$encoding" = "binary" ]; then
|
elif [ "$encoding" = "binary" ]; then
|
||||||
if [ "$ext" = "gif" ]; then
|
if [ "${mimetype%%/*}" = "image" ]; then
|
||||||
|
if [ "${mimetype#*/}" = "gif" ] && exists convert; then
|
||||||
generate_preview "$cols" "$lines" "$1" "gif"
|
generate_preview "$cols" "$lines" "$1" "gif"
|
||||||
elif [ "${mimetype#*/}" = "x-xcf" ]; then
|
elif [ ! "${mimetype#*/}" = "jpeg" ]; then
|
||||||
generate_preview "$cols" "$lines" "$1" "xcf"
|
generate_preview "$cols" "$lines" "$1" "image"
|
||||||
elif [ "${mimetype%%/*}" = "image" ]; then
|
else
|
||||||
image_preview "$cols" "$lines" "$1"
|
image_preview "$cols" "$lines" "$1"
|
||||||
|
fi
|
||||||
elif [ "${mimetype%%/*}" = "audio" ] && exists ffmpeg; then
|
elif [ "${mimetype%%/*}" = "audio" ] && exists ffmpeg; then
|
||||||
generate_preview "$cols" "$lines" "$1" "audio"
|
generate_preview "$cols" "$lines" "$1" "audio"
|
||||||
elif [ "${mimetype%%/*}" = "video" ] && exists ffmpegthumbnailer; then
|
elif [ "${mimetype%%/*}" = "video" ] && exists ffmpegthumbnailer; then
|
||||||
|
@ -226,19 +232,19 @@ preview_file () {
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_preview() {
|
generate_preview() {
|
||||||
if [ ! -f "$TMPDIR/$3.jpg" ]; then
|
if [ ! -f "$NNN_PREVIEWDIR/$3.jpg" ] || [ -n "$(find -L "$3" -newer "$NNN_PREVIEWDIR/$3.jpg")" ]; then
|
||||||
mkdir -p "$TMPDIR/${3%/*}"
|
mkdir -p "$NNN_PREVIEWDIR/${3%/*}"
|
||||||
case $4 in
|
case $4 in
|
||||||
audio) ffmpeg -i "$3" "$TMPDIR/$3.jpg" -y >/dev/null 2>&1 ;;
|
audio) ffmpeg -i "$3" -filter_complex "scale=iw*min(1\,min($NNN_PREVIEWWIDTH/iw\,ih)):-1" "$NNN_PREVIEWDIR/$3.jpg" -y >/dev/null 2>&1 ;;
|
||||||
epub) gnome-epub-thumbnailer "$3" "$TMPDIR/$3.jpg" >/dev/null 2>&1 ;;
|
epub) gnome-epub-thumbnailer "$3" "$NNN_PREVIEWDIR/$3.jpg" >/dev/null 2>&1 ;;
|
||||||
font) fontpreview -i "$3" -o "$TMPDIR/$3.jpg" >/dev/null 2>&1 ;;
|
font) fontpreview -i "$3" -o "$NNN_PREVIEWDIR/$3.jpg" >/dev/null 2>&1 ;;
|
||||||
gif) if exists ueberzug && exists convert || [ "$TERMINAL" = "kitty" ]; then
|
gif) if exists ueberzug && exists convert || [ "$TERMINAL" = "kitty" ]; then
|
||||||
if [ ! -d "$TMPDIR/$3" ]; then
|
if [ ! -d "$NNN_PREVIEWDIR/$3" ]; then
|
||||||
mkdir -p "$TMPDIR/$3"
|
mkdir -p "$NNN_PREVIEWDIR/$3"
|
||||||
convert -coalesce "$3" "$TMPDIR/$3/${3##*/}.jpg"
|
convert -coalesce -resize "$NNN_PREVIEWWIDTH"x"$NNN_PREVIEWHEIGHT"\> "$3" "$NNN_PREVIEWDIR/$3/${3##*/}.jpg"
|
||||||
fi
|
fi
|
||||||
while true; do
|
while true; do
|
||||||
for frame in $(find "$TMPDIR/$3"/*.jpg | sort -V); do
|
for frame in $(find "$NNN_PREVIEWDIR/$3"/*.jpg | sort -V); do
|
||||||
image_preview "$1" "$2" "$frame"
|
image_preview "$1" "$2" "$frame"
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
done
|
done
|
||||||
|
@ -250,20 +256,16 @@ generate_preview() {
|
||||||
image_preview "$1" "$2" "$3"
|
image_preview "$1" "$2" "$3"
|
||||||
return
|
return
|
||||||
fi ;;
|
fi ;;
|
||||||
office) libreoffice --convert-to jpg "$3" --outdir "$TMPDIR/${3%/*}" > /dev/null 2>&1
|
image) convert "$3" -flatten -resize "$NNN_PREVIEWWIDTH"x"$NNN_PREVIEWHEIGHT"\> "$NNN_PREVIEWDIR/$3.jpg" ;;
|
||||||
|
office) libreoffice --convert-to jpg "$3" --outdir "$NNN_PREVIEWDIR/${3%/*}" > /dev/null 2>&1
|
||||||
filename="$(echo "${3##*/}" | cut -d. -f1)"
|
filename="$(echo "${3##*/}" | cut -d. -f1)"
|
||||||
mv "$TMPDIR/${3%/*}/$filename.jpg" "$TMPDIR/$3.jpg" ;;
|
mv "$NNN_PREVIEWDIR/${3%/*}/$filename.jpg" "$NNN_PREVIEWDIR/$3.jpg" ;;
|
||||||
pdf) pdftoppm -jpeg -f 1 -singlefile "$3" "$TMPDIR/$3" >/dev/null 2>&1 ;;
|
pdf) pdftoppm -jpeg -f 1 -singlefile "$3" "$NNN_PREVIEWDIR/$3" >/dev/null 2>&1 ;;
|
||||||
video) if ! ffmpegthumbnailer -i "$3" -o "$TMPDIR/$3.jpg" -s 0 -q 10 >/dev/null 2>&1; then
|
video) ffmpegthumbnailer -m -s0 -i "$3" -o "$NNN_PREVIEWDIR/$3.jpg" >/dev/null 2>&1 || rm "$NNN_PREVIEWDIR/$3.jpg" ;;
|
||||||
rm "$TMPDIR/$3.jpg"
|
|
||||||
fifo_pager print_bin_info "$3"
|
|
||||||
return
|
|
||||||
fi ;;
|
|
||||||
xcf) convert -flatten "$3" "$TMPDIR/$3.jpg" ;;
|
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
if [ -f "$TMPDIR/$3.jpg" ]; then
|
if [ -f "$NNN_PREVIEWDIR/$3.jpg" ]; then
|
||||||
image_preview "$1" "$2" "$TMPDIR/$3.jpg"
|
image_preview "$1" "$2" "$NNN_PREVIEWDIR/$3.jpg"
|
||||||
else
|
else
|
||||||
fifo_pager print_bin_info "$3"
|
fifo_pager print_bin_info "$3"
|
||||||
fi
|
fi
|
||||||
|
@ -307,10 +309,6 @@ ueberzug_refresh() {
|
||||||
preview_fifo &
|
preview_fifo &
|
||||||
wait
|
wait
|
||||||
}
|
}
|
||||||
if [ "$TERMINAL" != "kitty" ] && [ "$PREVIEW_MODE" ] && exists ueberzug; then
|
|
||||||
trap 'ueberzug_refresh' WINCH
|
|
||||||
trap 'rm "$FIFO_UEBERZUG" "$PAGERPID" "$GIFPID" "$CURSEL"' INT HUP EXIT
|
|
||||||
fi
|
|
||||||
|
|
||||||
preview_fifo() {
|
preview_fifo() {
|
||||||
# use cat instead of 'exec <' to avoid issues with dash shell
|
# use cat instead of 'exec <' to avoid issues with dash shell
|
||||||
|
@ -338,6 +336,8 @@ if [ "$PREVIEW_MODE" ]; then
|
||||||
|
|
||||||
if [ "$TERMINAL" != "kitty" ] && exists ueberzug; then
|
if [ "$TERMINAL" != "kitty" ] && exists ueberzug; then
|
||||||
mkfifo "$FIFO_UEBERZUG"
|
mkfifo "$FIFO_UEBERZUG"
|
||||||
|
trap 'ueberzug_refresh' WINCH
|
||||||
|
trap 'rm "$FIFO_UEBERZUG" "$PAGERPID" "$GIFPID" "$CURSEL"' INT HUP EXIT
|
||||||
tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser json &
|
tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser json &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue