summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/fifo/fzf-fifo45
-rwxr-xr-xscripts/fifo/img-fifo31
-rwxr-xr-xscripts/fzfub25
-rwxr-xr-xscripts/img30
-rwxr-xr-xscripts/lf/cleaner3
-rwxr-xr-xscripts/lf/lfub34
-rwxr-xr-xscripts/lf/preview65
-rw-r--r--scripts/sockets.py32
8 files changed, 265 insertions, 0 deletions
diff --git a/scripts/fifo/fzf-fifo b/scripts/fifo/fzf-fifo
new file mode 100755
index 0000000..a9d5d20
--- /dev/null
+++ b/scripts/fifo/fzf-fifo
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# This is a simple script that allows you to have image preview
+# in fzf, using ueberzugpp with fifo. For this script to work
+# you must add it to path, because it requires to call itself
+# during the preview process in fzf (line 42 -> $0).
+# Example usage:
+# ls | fzf-fifo
+# find $HOME/pix/ -type f -iname "*.jpg" | fzf-fifo
+
+FIFO="/tmp/fzf_preview_fifo"
+[ -p "$FIFO" ] || mkfifo "$FIFO"
+
+start_ueberzugpp() {
+ ueberzugpp layer --silent <"$FIFO" &
+ exec 3>"${FIFO}"
+}
+
+cleanup() {
+ exec 3>&-
+}
+trap cleanup HUP INT QUIT TERM EXIT
+
+preview_image() {
+ echo '{"path": "'"$1"'", "action": "add", ''"identifier": "fzfpreview", '\
+ '"x": "'"$FZF_PREVIEW_LEFT"'", "y": "'"$FZF_PREVIEW_TOP"'", '\
+ '"width": "'"$FZF_PREVIEW_COLUMNS"'", "height": "'"$FZF_PREVIEW_LINES"'"}' \
+ >"$FIFO"
+}
+
+case "$1" in
+ -W)
+ shift
+ preview_image "$@"
+ exit
+ ;;
+esac
+
+main() {
+ start_ueberzugpp
+ selected_image=$(fzf --preview "$0 -W {}" --preview-window=up:60%:wrap)
+ [ -n "$selected_image" ] && echo "Selected image: $selected_image"
+ rm "$FIFO"
+}
+main
diff --git a/scripts/fifo/img-fifo b/scripts/fifo/img-fifo
new file mode 100755
index 0000000..78aeb9d
--- /dev/null
+++ b/scripts/fifo/img-fifo
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+# This is a simple script that allows you to use ueberzugpp to
+# preview images in the terminal by providing the x and y
+# coordinates of the image, the width and height of the image,
+# and the path to the image file, with $1, $2, $3, $4 and $5
+# as arguments, respectively.
+# Example usage:
+# ./img-fifo 0 0 30 30 image.jpg
+# Use Ctrl+C to exit.
+
+FIFO="/tmp/preview_fifo"
+[ -p "$FIFO" ] || mkfifo "$FIFO"
+
+start_ueberzugpp() {
+ ueberzugpp layer --silent <"$FIFO" &
+ exec 3>"${FIFO}"
+}
+
+cleanup() {
+ rm -f "$FIFO"
+}
+trap cleanup HUP INT QUIT TERM EXIT
+
+preview_image() {
+ echo '{"path": "'"$5"'", "action": "add", "identifier": "img-fifo", "x": "'"$1"'", "y": "'"$2"'", "width": "'"$3"'", "height": "'"$4"'"}' >"$FIFO"
+}
+
+start_ueberzugpp
+preview_image "$1" "$2" "$3" "$4" "$5"
+wait
diff --git a/scripts/fzfub b/scripts/fzfub
new file mode 100755
index 0000000..48d8b67
--- /dev/null
+++ b/scripts/fzfub
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+case "$(uname -a)" in
+ *Darwin*) UEBERZUG_TMP_DIR="$TMPDIR" ;;
+ *) UEBERZUG_TMP_DIR="/tmp" ;;
+esac
+
+cleanup() {
+ ueberzugpp cmd -s "$SOCKET" -a exit
+}
+trap cleanup HUP INT QUIT TERM EXIT
+
+UB_PID_FILE="$UEBERZUG_TMP_DIR/.$(uuidgen)"
+ueberzugpp layer --no-stdin --silent --use-escape-codes --pid-file "$UB_PID_FILE"
+UB_PID=$(cat "$UB_PID_FILE")
+
+export SOCKET="$UEBERZUG_TMP_DIR"/ueberzugpp-"$UB_PID".socket
+
+# run fzf with preview
+fzf --reverse --preview="ueberzugpp cmd -s $SOCKET -i fzfpreview -a add \
+ -x \$FZF_PREVIEW_LEFT -y \$FZF_PREVIEW_TOP \
+ --max-width \$FZF_PREVIEW_COLUMNS --max-height \$FZF_PREVIEW_LINES \
+ -f {}"
+
+ueberzugpp cmd -s "$SOCKET" -a exit
diff --git a/scripts/img b/scripts/img
new file mode 100755
index 0000000..fef7262
--- /dev/null
+++ b/scripts/img
@@ -0,0 +1,30 @@
+#!/bin/sh
+set -e
+
+# This is a simple script that allows you to use ueberzugpp to
+# preview images in the terminal by providing the x and y
+# coordinates of the image, the width and height of the image,
+# and the path to the image file, with $1, $2, $3, $4 and $5
+# as arguments, respectively.
+# Example usage:
+# ./img 0 0 30 30 image.jpg
+
+UB_PID=0
+UB_SOCKET=""
+
+case "$(uname -a)" in
+ *Darwin*) UEBERZUG_TMP_DIR="$TMPDIR" ;;
+ *) UEBERZUG_TMP_DIR="/tmp" ;;
+esac
+
+cleanup() {
+ ueberzugpp cmd -s "$UB_SOCKET" -a exit
+}
+trap cleanup HUP INT QUIT TERM EXIT
+
+UB_PID_FILE="$UEBERZUG_TMP_DIR/.$(uuidgen)"
+ueberzugpp layer --no-stdin --silent --use-escape-codes --pid-file "$UB_PID_FILE"
+UB_PID="$(cat "$UB_PID_FILE")"
+export UB_SOCKET="$UEBERZUG_TMP_DIR"/ueberzugpp-"$UB_PID".socket
+ueberzugpp cmd -s "$UB_SOCKET" -a add -i PREVIEW -x "$1" -y "$2" --max-width "$3" --max-height "$4" -f "$5"
+sleep 2
diff --git a/scripts/lf/cleaner b/scripts/lf/cleaner
new file mode 100755
index 0000000..0159d5a
--- /dev/null
+++ b/scripts/lf/cleaner
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+ueberzugpp cmd -s $UB_SOCKET -a remove -i PREVIEW
diff --git a/scripts/lf/lfub b/scripts/lf/lfub
new file mode 100755
index 0000000..45864e5
--- /dev/null
+++ b/scripts/lf/lfub
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# This is a wrapper script for lf that allows it to create image previews with
+# ueberzug. This works in concert with the lf configuration file and the
+# lf-cleaner script.
+
+set -e
+
+UB_PID=0
+UB_SOCKET=""
+
+case "$(uname -a)" in
+ *Darwin*) UEBERZUG_TMP_DIR="$TMPDIR" ;;
+ *) UEBERZUG_TMP_DIR="/tmp" ;;
+esac
+
+cleanup() {
+ exec 3>&-
+ ueberzugpp cmd -s "$UB_SOCKET" -a exit
+}
+
+if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
+ lf "$@"
+else
+ [ ! -d "$HOME/.cache/lf" ] && mkdir -p "$HOME/.cache/lf"
+ UB_PID_FILE="$UEBERZUG_TMP_DIR/.$(uuidgen)"
+ ueberzugpp layer --silent --no-stdin --use-escape-codes --pid-file "$UB_PID_FILE"
+ UB_PID=$(cat "$UB_PID_FILE")
+ rm "$UB_PID_FILE"
+ UB_SOCKET="$UEBERZUG_TMP_DIR/ueberzugpp-${UB_PID}.socket"
+ export UB_PID UB_SOCKET
+ trap cleanup HUP INT QUIT TERM EXIT
+ lf "$@" 3>&-
+fi
diff --git a/scripts/lf/preview b/scripts/lf/preview
new file mode 100755
index 0000000..ab41c61
--- /dev/null
+++ b/scripts/lf/preview
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+image() {
+ FILE_PATH="$1"
+ X=$4
+ Y=$5
+ MW=$(($2 - 1))
+ MH=$3
+ ueberzugpp cmd -s "$UB_SOCKET" -a add -i PREVIEW -x "$X" -y "$Y" --max-width "$MW" --max-height "$MH" -f "$FILE_PATH"
+ exit 1
+}
+
+batorcat() {
+ file="$1"
+ shift
+ if command -v bat >/dev/null 2>&1; then
+ bat --color=always --style=plain --pager=never "$file" "$@"
+ else
+ cat "$file"
+ fi
+}
+
+CACHE="$HOME/.cache/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}'))"
+
+case "$(printf "%s\n" "$(readlink -f "$1")" | tr '[:upper:]' '[:lower:]')" in
+ *.tgz | *.tar.gz) tar tzf "$1" ;;
+ *.tar.bz2 | *.tbz2) tar tjf "$1" ;;
+ *.tar.txz | *.txz) xz --list "$1" ;;
+ *.tar) tar tf "$1" ;;
+ *.zip | *.jar | *.war | *.ear | *.oxt) unzip -l "$1" ;;
+ *.rar) unrar l "$1" ;;
+ *.7z) 7z l "$1" ;;
+ *.[1-8]) man "$1" | col -b ;;
+ *.o) nm "$1" ;;
+ *.torrent) transmission-show "$1" ;;
+ *.iso) iso-info --no-header -l "$1" ;;
+ *.odt | *.ods | *.odp | *.sxw) odt2txt "$1" ;;
+ *.doc) catdoc "$1" ;;
+ *.docx) docx2txt "$1" - ;;
+ *.xls | *.xlsx)
+ ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batorcat --language=csv
+ ;;
+ *.wav | *.mp3 | *.flac | *.m4a | *.wma | *.ape | *.ac3 | *.og[agx] | *.spx | *.opus | *.as[fx] | *.mka)
+ exiftool "$1"
+ ;;
+ *.pdf)
+ [ ! -f "${CACHE}.jpg" ] && pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
+ image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
+ ;;
+ *.avi | *.mp4 | *.wmv | *.dat | *.3gp | *.ogv | *.mkv | *.mpg | *.mpeg | *.vob | *.fl[icv] | *.m2v | *.mov | *.webm | *.ts | *.mts | *.m4v | *.r[am] | *.qt | *.divx)
+ [ ! -f "${CACHE}.jpg" ] && ffmpegthumbnailer -i "$1" -o "${CACHE}.jpg" -s 0 -q 5
+ image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
+ ;;
+ *.bmp | *.jpg | *.jpeg | *.png | *.xpm | *.webp | *.gif | *.jfif)
+ image "$1" "$2" "$3" "$4" "$5"
+ ;;
+ *.svg)
+ [ ! -f "${CACHE}.jpg" ] && convert "$1" "${CACHE}.jpg"
+ image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
+ ;;
+ *)
+ batorcat "$1"
+ ;;
+esac
+exit 0
diff --git a/scripts/sockets.py b/scripts/sockets.py
new file mode 100644
index 0000000..802d5e6
--- /dev/null
+++ b/scripts/sockets.py
@@ -0,0 +1,32 @@
+import socket
+import time
+import os
+
+cmd1 = """
+{"action":"add","identifier":"preview","max_height":21,"max_width":118,"path":"/tmp/a.png","x":10,"y":15}
+"""
+
+cmd2 = """
+{"action":"add","identifier":"preview","max_height":47,"max_width":118,"path":"/tmp/b.png","x":10,"y":15}
+"""
+
+cmd_exit = """
+{"action":"remove","identifier":"preview"}
+"""
+
+s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+connected = False
+while not connected:
+ try:
+ s.connect(f"/tmp/ueberzugpp-30468.socket")
+ connected = True
+ except Exception:
+ time.sleep(0.05)
+
+s.sendall(str.encode(cmd1 + "\n"))
+time.sleep(2)
+s.sendall(str.encode(cmd_exit + "\n"))
+s.sendall(str.encode(cmd2 + "\n"))
+time.sleep(2)
+s.sendall(str.encode(cmd_exit + "\n"))
+s.close()