From a77dc27cbbdb26298bf43ffebdb51d2a033946cc Mon Sep 17 00:00:00 2001 From: TiynGER Date: Sat, 23 Nov 2019 11:02:54 +0100 Subject: [PATCH] adding pdf and image preview to vifm --- .config/profile | 4 ++-- .config/vifm/vifmrc | 14 +++++++++-- .local/bin/vifm/vifmimg | 53 +++++++++++++++++++++++++++++++++++++++++ .local/bin/vifm/vifmrun | 15 ++++++++++++ 4 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 .local/bin/vifm/vifmimg create mode 100644 .local/bin/vifm/vifmrun diff --git a/.config/profile b/.config/profile index 46dc920..2ca2b5e 100644 --- a/.config/profile +++ b/.config/profile @@ -7,7 +7,7 @@ export EDITOR="nvim" export TERMINAL="st" export BROWSER="firefox" export READER="zathura" -export FILE="vifm" +export FILE="vifmrun" export SUDO_ASKPASS="$HOME/.local/bin/tools/dmenupass" export NOTMUCH_CONFIG="$HOME/.config/notmuch-config" export GTK2_RC_FILES="$HOME/.config/gtk-2.0/gtkrc-2.0" @@ -18,7 +18,7 @@ export VIDEO="mpv" export AUDIO="mpv" export TABLE="sc-im" export IMAGE="sxiv" -export LATEX="vim" +export LATEX="nvim" export MAIL="thunderbird" export MUSIC="ncmpcpp" diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc index 6a2ee3f..db45627 100644 --- a/.config/vifm/vifmrc +++ b/.config/vifm/vifmrc @@ -172,7 +172,11 @@ command! reload :write | restart " Pdf filextype *.pdf zathura %c %i &, apvlv %c, xpdf %c -fileviewer *.pdf pdftotext -nopgbrk %c - +fileviewer *.pdf + \ vifmimg pdfpreview %px %py %pw %ph %c + \ %pc + \ vifmimg clear + "\ pdftotext -nopgbrk %c - " PostScript filextype *.ps,*.eps,*.ps.gz @@ -238,7 +242,13 @@ filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm \ {View in shotwell} \ shotwell, fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm - \ identify %f + \ vifmimg draw %px %py %pw %ph %c + \ %pc + \ vifmimg clear +fileviewer *.gif + \ vifmimg gifpreview %px %py %pw %ph %c + \ %pc + \vifmimg clear " OpenRaster filextype *.ora diff --git a/.local/bin/vifm/vifmimg b/.local/bin/vifm/vifmimg new file mode 100644 index 0000000..e5d8763 --- /dev/null +++ b/.local/bin/vifm/vifmimg @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +readonly ID_PREVIEW="preview" + +#AUTO_REMOVE="yes" +# By enabling this option the script will remove the preview file after it is drawn +# and by doing so the preview will always be up-to-date with the file. +# This however, requires more CPU and therefore affects the overall performance. + +if [ -e "$FIFO_UEBERZUG" ]; then + if [[ "$1" == "draw" ]]; then + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="${PWD}/$6") \ + > "$FIFO_UEBERZUG" + + elif [[ "$1" == "videopreview" ]]; then + echo -e "Loading preview..\nFile: $6" + [[ ! -d "/tmp${PWD}/$6/" ]] && mkdir -p "/tmp${PWD}/$6/" + [[ ! -f "/tmp${PWD}/$6.png" ]] && ffmpegthumbnailer -i "${PWD}/$6" -o "/tmp${PWD}/$6.png" -s 0 -q 10 + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="/tmp${PWD}/$6.png") \ + > "$FIFO_UEBERZUG" + + elif [[ "$1" == "gifpreview" ]]; then + echo -e "Loading preview..\nFile: $6" + [[ ! -d "/tmp${PWD}/$6/" ]] && mkdir -p "/tmp${PWD}/$6/" && convert -coalesce "${PWD}/$6" "/tmp${PWD}/$6/$6.png" + for frame in $(ls -1 /tmp${PWD}/$6/$6*.png | sort -V); do + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="$frame") \ + > "$FIFO_UEBERZUG" + # Sleep between frames to make the animation smooth. + sleep .07 + done + + elif [[ "$1" == "pdfpreview" ]]; then + echo -e "Loading preview..\nFile: $6" + [[ ! -d "/tmp${PWD}/$6/" ]] && mkdir -p "/tmp${PWD}/$6/" + [[ ! -f "/tmp${PWD}/$6.png" ]] && pdftoppm -png -singlefile "$6" "/tmp${PWD}/$6" + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="/tmp${PWD}/$6.png") \ + > "$FIFO_UEBERZUG" + + elif [[ "$1" == "clear" ]]; then + declare -p -A cmd=([action]=remove [identifier]="$ID_PREVIEW") \ + > "$FIFO_UEBERZUG" + [[ ! -z $AUTO_REMOVE ]] && [[ -f "/tmp${PWD}/$6.png" ]] && rm -f "/tmp${PWD}/$6.png" + [[ ! -z $AUTO_REMOVE ]] && [[ -d "/tmp${PWD}/$6/" ]] && rm -rf "/tmp${PWD}/$6/" + + fi +fi diff --git a/.local/bin/vifm/vifmrun b/.local/bin/vifm/vifmrun new file mode 100644 index 0000000..9eda32a --- /dev/null +++ b/.local/bin/vifm/vifmrun @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +export FIFO_UEBERZUG="/tmp/vifm-ueberzug-${PPID}" + +function cleanup { + rm "$FIFO_UEBERZUG" 2>/dev/null + pkill -P $$ 2>/dev/null +} + +rm "$FIFO_UEBERZUG" 2>/dev/null +mkfifo "$FIFO_UEBERZUG" +trap cleanup EXIT +tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser bash & + +vifm +cleanup