From 26f135d26bdd25752760f196bf0357bda781535e Mon Sep 17 00:00:00 2001 From: Luca Bilke Date: Mon, 29 Jan 2024 20:46:03 +0100 Subject: [PATCH] rework lf previewer selection --- .config/lf/lfrc | 36 +++++++++++++++++++------------- .config/lf/preview/chafa | 1 + .config/lf/{ => preview}/clean | 0 .config/lf/{ => preview}/preview | 21 ++++++++++++++----- .config/lf/preview/sixel | 1 + .config/lf/preview/ueberzug | 1 + .config/zsh/configs/vars | 1 + .config/zsh/configs/widgets | 8 ++++++- .local/bin/lf-sixel | 5 +++-- .local/bin/lf-ueberzug | 3 ++- 10 files changed, 54 insertions(+), 23 deletions(-) create mode 120000 .config/lf/preview/chafa rename .config/lf/{ => preview}/clean (100%) rename .config/lf/{ => preview}/preview (80%) create mode 120000 .config/lf/preview/sixel create mode 120000 .config/lf/preview/ueberzug diff --git a/.config/lf/lfrc b/.config/lf/lfrc index 4c03bb69..f65e4bbb 100644 --- a/.config/lf/lfrc +++ b/.config/lf/lfrc @@ -7,21 +7,10 @@ set scrolloff 10 set icons set wrapscroll set period 1 -set previewer ~/.config/lf/preview -set cleaner ~/.config/lf/clean +set previewer "~/.config/lf/preview/chafa" set cursorpreviewfmt "\033[7;90m" set promptfmt "\033[34;1m%u\033[36m@\033[34m%h \033[35m[\033[0;1m%d\033[35m]\033[32m ยป \033[33m%f\033[0m" -cmd toggle-preview %{{ - if [ "$(basename $lf_previewer)" = "preview" ]; then - lf -remote "send $id set previewer mediainfo" - else - lf -remote "send $id set previewer ~/.config/lf/preview" - fi - $lf_cleaner - lf -remote "send $id reload" -}} - cmd open $set -f; rifle -c $XDG_CONFIG_HOME/lf/rifle.conf -p 0 $fx; clear cmd open-with ${{ @@ -33,7 +22,6 @@ cmd mkdir &mkdir -p "$(echo $* | tr ' ' '\ ')" cmd trash &{{ for f in $fx; do - echo $f trash-put $f & done lf -remote "send $id load" @@ -139,16 +127,37 @@ cmd fzfgrep ${{ )" [ -n "$res" ] && lf -remote "send $id select \"$res\"" }} + cmd extract ${{ for f in $fx; do aunpack "$f" done }} +# TODO: Move this to zsh config # cmd fzfworkon ${{ # workon -n $(workon | fzf) # }} +cmd set_previewer %{{ + if [ "${1}" = "sixel" ]; then + lf -remote "send $id set sixel" + lf -remote "send $id set previewer ~/.config/lf/preview/sixel" + lf -remote "send $id reload" + echo 'Previewer set to sixel' + elif [ "${1}" = "ueberzug" ]; then + lf -remote "send $id set cleaner ~/.config/lf/preview/clean" + lf -remote "send $id set previewer ~/.config/lf/preview/ueberzug" + lf -remote "send $id reload" + echo 'Previewer set to ueberzug' + else + lf -remote "send $id set previewer ~/.config/lf/preview/chafa" + lf -remote "send $id reload" + echo 'Previewer set to chafa' + fi +}} + + # Bindings map a fzfsearch map t fzftags @@ -159,7 +168,6 @@ map T trash map $trash-restore $PWD map &rm -rf -- $fx map extract -map R toggle-preview map P link # map S share map lazygit diff --git a/.config/lf/preview/chafa b/.config/lf/preview/chafa new file mode 120000 index 00000000..4de2f126 --- /dev/null +++ b/.config/lf/preview/chafa @@ -0,0 +1 @@ +preview \ No newline at end of file diff --git a/.config/lf/clean b/.config/lf/preview/clean similarity index 100% rename from .config/lf/clean rename to .config/lf/preview/clean diff --git a/.config/lf/preview b/.config/lf/preview/preview similarity index 80% rename from .config/lf/preview rename to .config/lf/preview/preview index 2e8e0637..87ff1b71 100755 --- a/.config/lf/preview +++ b/.config/lf/preview/preview @@ -1,5 +1,6 @@ #!/bin/sh + RED="\033[31m" RESET="\033[0m" @@ -10,12 +11,22 @@ f=$1 w=$2 h=$3 x=$4 y=$5 image() { f=$1 w=$2 h=$3 x=$4 y=$5 if [ -f "$f" ] && [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ]; then - # chafa "$f" -f sixel -s "$(($2 - 2))x$3" --animate false - if command -V ueberzug >/dev/null 2>&1; then - printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$(($4 + 3))" "$(($5 + 1))" "$(($2 - 6))" "$(($3 - 2))" "$1" >"$FIFO_UEBERZUG" + name=$(basename "$0") + if [ "$name" = "sixel" ]; then + [ "$TERM_PROGRAM" = "tmux" ] && tmuxflags="--passthrough tmux" + # shellcheck disable=2086 + chafa "$f" -f sixel -s "$(($2 - 2))x$3" --animate false --polite on $tmuxflags + exit 0 + elif [ "$name" = "ueberzug" ]; then + if command -V ueberzug >/dev/null 2>&1; then + printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$(($4 + 3))" "$(($5 + 1))" "$(($2 - 6))" "$(($3 - 2))" "$1" >"$FIFO_UEBERZUG" + fi + exit 1 + else + chafa "$f" -s "$(($2 - 2))x$3" --polite on fi fi - exit 1 + } video() { @@ -92,7 +103,7 @@ if command -v gio 1>/dev/null 2>&1; then fi case $(file -b "$f") in -*ASCII* | *UTF*) text "$f" "$w";; +*ASCII* | *UTF*) text "$f" "$w" ;; *) printf "%b" "\$(file --mime-type)\t\t\t : $filerun\n" [ -n "$giorun" ] && printf "%b" "\$(gio info)\t\t\t\t : $giorun\n" diff --git a/.config/lf/preview/sixel b/.config/lf/preview/sixel new file mode 120000 index 00000000..4de2f126 --- /dev/null +++ b/.config/lf/preview/sixel @@ -0,0 +1 @@ +preview \ No newline at end of file diff --git a/.config/lf/preview/ueberzug b/.config/lf/preview/ueberzug new file mode 120000 index 00000000..4de2f126 --- /dev/null +++ b/.config/lf/preview/ueberzug @@ -0,0 +1 @@ +preview \ No newline at end of file diff --git a/.config/zsh/configs/vars b/.config/zsh/configs/vars index 80836dc0..d9888a08 100644 --- a/.config/zsh/configs/vars +++ b/.config/zsh/configs/vars @@ -2,3 +2,4 @@ HISTSIZE=10000000 SAVEHIST=10000000 HISTFILE="$XDG_DATA_HOME/zsh/history" KEYTIMEOUT=1 +LF_PREVIEW_TYPE=sixel # sixel | ueberzug | *chafa* diff --git a/.config/zsh/configs/widgets b/.config/zsh/configs/widgets index 39e2c9b8..8555998c 100644 --- a/.config/zsh/configs/widgets +++ b/.config/zsh/configs/widgets @@ -16,7 +16,13 @@ function reset_beam() { echo -ne '\e[5 q'; } function lfwrap () { LF_DIRFILE="/tmp/lfdir.$(uuidgen)" - lf-ueberzug -last-dir-path="$LF_DIRFILE" + if [ "${LF_PREVIEW_TYPE:-sixel}" = "sixel" ]; then + lf-sixel -last-dir-path="$LF_DIRFILE" + elif [ "${LF_PREVIEW_TYPE}" = "ueberzug" ]; then + lf-ueberzug -last-dir-path="$LF_DIRFILE" + else + lf -last-dir-path="$LF_DIRFILE" + fi dir="$(cat "$LF_DIRFILE")" rm "$LF_DIRFILE" if [ -d "$dir" ]; then diff --git a/.local/bin/lf-sixel b/.local/bin/lf-sixel index 7044cabf..140c8971 100755 --- a/.local/bin/lf-sixel +++ b/.local/bin/lf-sixel @@ -2,8 +2,9 @@ set -e if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then - lf "$@" + command lf "$@" else [ ! -d "$HOME/.cache/lf" ] && mkdir --parents "$HOME/.cache/lf" - lf "$@" 3>&- + # shellcheck disable=2016 + command lf -command 'set_previewer sixel' "$@" 3>&- fi diff --git a/.local/bin/lf-ueberzug b/.local/bin/lf-ueberzug index 3494a0e0..e449b30a 100755 --- a/.local/bin/lf-ueberzug +++ b/.local/bin/lf-ueberzug @@ -15,5 +15,6 @@ else ueberzug layer -s -p json <"$FIFO_UEBERZUG" & exec 3>"$FIFO_UEBERZUG" trap clean EXIT - command lf "$@" 3>&- + # shellcheck disable=2016 + command lf -command 'set_previewer ueberzug' "$@" 3>&- fi