summaryrefslogtreecommitdiff
path: root/.config/vifm/scripts
diff options
context:
space:
mode:
authorRoger Gonzalez <rogergonzalez21@gmail.com>2019-12-29 14:58:33 -0300
committerRoger Gonzalez <rogergonzalez21@gmail.com>2019-12-29 14:58:33 -0300
commitefb336a23b65a9a2d56889396b13c1757bdaf354 (patch)
tree234e40115f79a84c8a755df6fb932cc6797e36e1 /.config/vifm/scripts
Initial commit
Diffstat (limited to '.config/vifm/scripts')
-rwxr-xr-x.config/vifm/scripts/vifmimg154
-rwxr-xr-x.config/vifm/scripts/vifmrun15
2 files changed, 169 insertions, 0 deletions
diff --git a/.config/vifm/scripts/vifmimg b/.config/vifm/scripts/vifmimg
new file mode 100755
index 00000000..668a340b
--- /dev/null
+++ b/.config/vifm/scripts/vifmimg
@@ -0,0 +1,154 @@
+#!/usr/bin/env bash
+readonly ID_PREVIEW="preview"
+
+#PLAY_GIF="yes"
+# By enabling this option the GIF will be animated, by leaving it commented like it
+# is now will make the gif previews behave the same way as video previews.
+
+#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.
+
+# The messy code below is for moving pages in pdf files in the vifm file preview by
+# utilizing the < and > keys which will be bound to `vifmimg inc` or `vifmimg dec`.
+PDF_PAGE_CONFIG="$HOME/.config/vifm/vifmimgpdfpage"
+PDF_FILE_CONFIG="$HOME/.config/vifm/vifmimgpdffile"
+PDF_PAGE=1
+PDF_FILE=""
+# Initialize the variables and required files
+[[ -f "$PDF_PAGE_CONFIG" ]] && PDF_PAGE=$(cat $PDF_PAGE_CONFIG) || touch $PDF_PAGE_CONFIG
+[[ -f "$PDF_FILE_CONFIG" ]] && PDF_FILE=$(cat $PDF_FILE_CONFIG) || touch $PDF_FILE_CONFIG
+
+
+# Create temporary working directory if the directory structure doesn't exist
+if [[ ! -d "/tmp$PWD/" ]]; then
+ mkdir -p "/tmp$PWD/"
+fi
+
+function inc() {
+ VAL="$(cat $PDF_PAGE_CONFIG)"
+ echo "$(expr $VAL + 1)" > $PDF_PAGE_CONFIG
+}
+
+function dec() {
+ VAL="$(cat $PDF_PAGE_CONFIG)"
+ echo "$(expr $VAL - 1)" > $PDF_PAGE_CONFIG
+ if [[ $VAL -le 0 ]]; then
+ echo 0 > $PDF_PAGE_CONFIG
+ fi
+}
+
+function previewclear() {
+ declare -p -A cmd=([action]=remove [identifier]="$ID_PREVIEW") \
+ > "$FIFO_UEBERZUG"
+}
+
+function fileclean() {
+ if [[ -f "/tmp$PWD/$6.png" ]]; then
+ rm -f "/tmp$PWD/$6.png"
+ elif [[ -d "/tmp$PWD/$6/" ]]; then
+ rm -rf "/tmp$PWD/$6/"
+ fi
+}
+
+function preview() {
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="$PWD/$6") \
+ > "$FIFO_UEBERZUG"
+}
+
+function previewvideo() {
+ if [[ ! -f "/tmp$PWD/$6.png" ]]; then
+ ffmpegthumbnailer -i "$PWD/$6" -o "/tmp$PWD/$6.png" -s 0 -q 10
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+function previewepub() {
+ if [[ ! -f "/tmp$PWD/$6.png" ]]; then
+ epub-thumbnailer "$6" "/tmp$PWD/$6.png" 1024
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+function previewgif() {
+ if [[ ! -d "/tmp$PWD/$6/" ]]; then
+ mkdir -p "/tmp$PWD/$6/"
+ convert -coalesce "$PWD/$6" "/tmp$PWD/$6/$6.png"
+ fi
+ if [[ ! -z "$PLAY_GIF" ]]; then
+ 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
+ else
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6/$6-0.png") \
+ > "$FIFO_UEBERZUG"
+ fi
+}
+
+function previewpdf() {
+ if [[ ! "$6" == "$PDF_FILE" ]]; then
+ PDF_PAGE=1
+ echo 1 > $PDF_PAGE_CONFIG
+ rm -f "/tmp$PWD/$6.png"
+ fi
+
+ if [[ ! "$PDF_PAGE" == "1" ]] && [[ -f "/tmp$PWD/$6.png" ]]; then
+ rm -f "/tmp$PWD/$6.png"
+ fi
+
+ if [[ ! -f "/tmp$PWD/$6.png" ]]; then
+ pdftoppm -png -f $PDF_PAGE -singlefile "$6" "/tmp$PWD/$6"
+ fi
+ echo "$6" > $PDF_FILE_CONFIG
+
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+
+function previewmagick() {
+ if [[ ! -f "/tmp$PWD/$6.png" ]]; then
+ convert -thumbnail $(identify -format "%wx%h" "$6") "$PWD/$6" "/tmp$PWD/$6.png"
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+
+
+function main() {
+ case "$1" in
+ "inc") inc "$@" ;;
+ "dec") dec "$@" ;;
+ "clear") previewclear "$@" ;;
+ "clean") fileclean "$@" ;;
+ "draw") preview "$@" ;;
+ "videopreview") previewvideo "$@" ;;
+ "epubpreview") previewepub "$@" ;;
+ "gifpreview") previewgif "$@" ;;
+ "pdfpreview") previewpdf "$@" ;;
+ "magickpreview") previewmagick "$@" ;;
+ "*") echo "Unknown command: '$@'" ;;
+ esac
+}
+main "$@"
diff --git a/.config/vifm/scripts/vifmrun b/.config/vifm/scripts/vifmrun
new file mode 100755
index 00000000..a032b418
--- /dev/null
+++ b/.config/vifm/scripts/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
+}
+pkill -P $$ 2>/dev/null
+rm "$FIFO_UEBERZUG" 2>/dev/null
+mkfifo "$FIFO_UEBERZUG" >/dev/null
+trap cleanup EXIT 2>/dev/null
+tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser bash 2>&1 >/dev/null &
+
+vifm
+cleanup