diff options
Diffstat (limited to '.config/lf')
-rwxr-xr-x | .config/lf/draw_img | 67 | ||||
-rwxr-xr-x | .config/lf/image | 17 | ||||
-rwxr-xr-x | .config/lf/lfrc | 178 | ||||
-rwxr-xr-x | .config/lf/preview | 48 | ||||
-rw-r--r-- | .config/lf/pv | 9 |
5 files changed, 319 insertions, 0 deletions
diff --git a/.config/lf/draw_img b/.config/lf/draw_img new file mode 100755 index 0000000..5a70d5e --- /dev/null +++ b/.config/lf/draw_img @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +clear_screen() { + printf '\e[%sH\e[9999C\e[1J%b\e[1;%sr' \ + "$((LINES-2))" "${TMUX:+\e[2J}" "$max_items" +} + +# Get a file's mime_type. +mime_type=$(file -bi "$1") + +# File isn't an image file, give warning. +if [[ $mime_type != image/* ]]; then + lf -remote "send $id echoerr 'Not an image'" + exit +fi + +w3m_paths=(/usr/{local/,}{lib,libexec,lib64,libexec64}/w3m/w3mi*) +read -r w3m _ < <(type -p w3mimgdisplay "${w3m_paths[@]}") +read -r LINES COLUMNS < <(stty size) + +# Get terminal window size in pixels and set it to WIDTH and HEIGHT. +export $(xdotool getactivewindow getwindowgeometry --shell) + +# Get the image size in pixels. +read -r img_width img_height < <("$w3m" <<< "5;${CACHE:-$1}") + +((img_width > WIDTH)) && { + ((img_height=img_height*WIDTH/img_width)) + ((img_width=WIDTH)) +} + +((img_height > HEIGHT)) && { + ((img_width=img_width*HEIGHT/img_height)) + ((img_height=HEIGHT)) +} + +# Variable needed for centering image. +HALF_HEIGHT=$(expr $HEIGHT / 2) +HALF_WIDTH=$(expr $WIDTH / 2) +HALF_IMG_HEIGHT=$(expr $img_height / 2) +HALF_IMG_WIDTH=$(expr $img_width / 2) +X_POS=$(expr $HALF_WIDTH - $HALF_IMG_WIDTH) +Y_POS=$(expr $HALF_HEIGHT - $HALF_IMG_HEIGHT) + +clear_screen +# Hide the cursor. +printf '\e[?25l' + +# Display the image. +printf '0;1;%s;%s;%s;%s;;;;;%s\n3;\n4\n' \ + ${X_POS:-0} \ + ${Y_POS:-0} \ + "$img_width" \ + "$img_height" \ + "${CACHE:-$1}" | "$w3m" &>/dev/null + +# Wait for user input. +read -ern 1 + +# Clear the image. +printf '6;%s;%s;%s;%s\n3;' \ + "${X_POS:-0}" \ + "${Y_POS:-0}" \ + "$WIDTH" \ + "$HEIGHT" | "$w3m" &>/dev/null + +clear_screen diff --git a/.config/lf/image b/.config/lf/image new file mode 100755 index 0000000..db64bf2 --- /dev/null +++ b/.config/lf/image @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +readonly ID_PREVIEW="preview" +main() { + case "$1" in + "clear") + declare -p -A cmd=([action]=remove [identifier]="$ID_PREVIEW") \ + > "$FIFO_UEBERZUG" + ;; + "draw") + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" \ + [x]="$3" [y]="$4" [max_width]="$5" [max_height]="$6" \ + [path]="$2") > "$FIFO_UEBERZUG" + ;; + "*") echo "Unknown command: '$1', '$2'" ;; + esac +} +main "$@" diff --git a/.config/lf/lfrc b/.config/lf/lfrc new file mode 100755 index 0000000..029cc8f --- /dev/null +++ b/.config/lf/lfrc @@ -0,0 +1,178 @@ +# Basic Settings +set previewer ~/.config/lf/preview +set preview true +# set drawbox true +# set icons true +set ignorecase true +set scrolloff 1 +set shell zsh + +# unmap keys +map y +map d +map m + +# keymappings +# rename +map C rename # at the end +map c push C<a-b><a-b><a-f> +map <c-c> push C<c-u> # new rename +map B bulk-rename # fix this + +# lf commands +map H set hidden! +map <c-r> reload + +# cut/copy/paste +map p paste +map yy copy +map dd cut +map D delete + +# new files/directories +map md push :mkdir<space> +map mf push :mkfile<space> +map mF push :touch<space> + +# opening files +map o push :open-with<space> +map L open_ext +map P share + +# selecting files/globs +map t toggle + +# custom commands +cmd open ${{ + case $(file --mime-type "$f" -bL) in + text/*|application/json) $EDITOR "$f";; + *) xdg-open "$f" ;; + esac +}} + +# open in another terminal +cmd open_ext ${{ + case $(file --mime-type "$f" -bL) in + text/*|application/json) $TERMINAL "-e" $EDITOR "$f";; + *) xdg-open "$f" ;; + esac +}} + +# cmd mkdir ${{ +# set -f +# printf "Directory Name: " +# read ans +# mkdir $ans +# }} + +# cmd mkfile ${{ +# printf "File Name: " +# read ans +# $EDITOR $ans +# }} + +# cmd mkdir %mkdir "$@" +cmd mkdir %{{ + IFS=" " + mkdir -p -- "$*" + lf -remote "send $id select \"$*\"" +}} +cmd mkfile %nvim "$@" +# cmd touch %touch "$@" +cmd touch %{{ + IFS=" " + touch "$*" + lf -remote "send $id select \"$*\"" +}} + +cmd chmod ${{ + printf "Mode Bits: " + read ans + + for file in "$fx" + do + chmod $ans $file + done + + lf -remote 'send reload' +}} + +cmd open-with %"$@" $fx +cmd share $curl -F"file=@$fx" https://0x0.st | xclip -selection c + +# bulk rename non-hidden or selected files +# cmd bulk-rename ${{ +# old="$(mktemp)" +# new="$(mktemp)" +# [ -n "$fs" ] && fs="$(ls)" +# printf '%s\n' "$fs" >"$old" +# printf '%s\n' "$fs" >"$new" +# $EDITOR "$new" +# [ "$(wc -l "$new")" -ne "$(wc -l "$old")" ] && exit +# paste "$old" "$new" | while IFS= read -r names; do +# src="$(printf '%s' "$names" | cut -f1)" +# dst="$(printf '%s' "$names" | cut -f2)" +# if [ "$src" = "$dst" ] || [ -e "$dst" ]; then +# continue +# fi +# mv -- "$src" "$dst" +# done +# rm -- "$old" "$new" +# lf -remote "send $id unselect" +# }} + +# override paste with cp-p +cmd paste $cp-p --lf-paste $id + +# archive bindings +cmd unarchive ${{ + case "$f" in + *.zip) unzip "$f" ;; + *.tar.gz) tar -xzvf "$f" ;; + *.tar.bz2) tar -xjvf "$f" ;; + *.tar) tar -xvf "$f" ;; + *) echo "Unsupported format" ;; + esac +}} + +cmd zip %zip -r "$f" "$f" +cmd tar %tar cvf "$f.tar" "$f" +cmd targz %tar cvzf "$f.tar.gz" "$f" +cmd tarbz2 %tar cjvf "$f.tar.bz2" "$f" + +# archive mappings +map az zip +map at tar +map ag targz +map ab targz +map au unarchive + +# this runs on each directory change +cmd on-cd &{{ + # display git repository status in your prompt + source /usr/share/git/completion/git-prompt.sh + GIT_PS1_SHOWDIRTYSTATE=auto + GIT_PS1_SHOWSTASHSTATE=auto + GIT_PS1_SHOWUNTRACKEDFILES=auto + GIT_PS1_SHOWUPSTREAM=auto + GIT_PS1_COMPRESSSPARSESTATE=auto + git=$(__git_ps1 " [GIT BRANCH:> %s]") || true + fmt="\033[32;1m%u@%h\033[0m:\033[34;1m%w\033[0m\033[33;1m$git\033[0m" + lf -remote "send $id set promptfmt \"$fmt\"" + + # update window title + printf "\033]0; $PWD\007" > /dev/tty +}} + +# set number of columns depending +# on window size on startup +# %{{ +# w=$(tput cols) +# if [ $w -le 80 ]; then +# lf -remote "send $id set ratios 1:2" +# elif [ $w -le 160 ]; then +# lf -remote "send $id set ratios 1:2:3" +# else +# lf -remote "send $id set ratios 1:2:3:5" +# fi +# }} diff --git a/.config/lf/preview b/.config/lf/preview new file mode 100755 index 0000000..3069a06 --- /dev/null +++ b/.config/lf/preview @@ -0,0 +1,48 @@ +#!/bin/sh + +# Clear the last preview (if any) +$HOME/.config/lf/image clear + +# Calculate where the image should be placed on the screen. +num=$(printf "%0.f\n" "`echo "$(tput cols) / 2" | bc`") +numb=$(printf "%0.f\n" "`echo "$(tput cols) - $num - 1" | bc`") +numc=$(printf "%0.f\n" "`echo "$(tput lines) - 2" | bc`") + +case "$1" 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" | less ;; + *.torrent) transmission-show "$1";; + *.iso) iso-info --no-header -l "$1";; + *odt,*.ods,*.odp,*.sxw) odt2txt "$1";; + *.doc) catdoc "$1" ;; + *.docx) docx2txt "$1" - ;; + *.csv) cat "$1" | sed s/,/\\n/g ;; + *.pdf) + CACHE=$(mktemp /tmp/thumbcache.XXXXX) + pdftoppm -png -f 1 -singlefile "$1" "$CACHE" + $HOME/.config/lf/image draw "$CACHE.png" $num 1 $numb $numc + ;; + *.epub) + CACHE=$(mktemp /tmp/thumbcache.XXXXX) + epub-thumbnailer "$1" "$CACHE" 1024 + $HOME/.config/lf/image draw "$CACHE" $num 1 $numb $numc + ;; + *.bmp|*.jpg|*.jpeg|*.png|*.xpm) + $HOME/.config/lf/image draw "$1" $num 1 $numb $numc + ;; + *.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.flac) exiftool "$1";; + *.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx) + CACHE=$(mktemp /tmp/thumbcache.XXXXX) + ffmpegthumbnailer -i "$1" -o "$CACHE" -s 0 + $HOME/.config/lf/image draw "$CACHE" $num 1 $numb $numc + ;; + *) highlight --out-format ansi "$1" || cat "$1";; +esac + diff --git a/.config/lf/pv b/.config/lf/pv new file mode 100644 index 0000000..9330eed --- /dev/null +++ b/.config/lf/pv @@ -0,0 +1,9 @@ +#!bin/sh +case "$1" in + *.tar*) tar tf "$1";; + *.zip) unzip -l "$1";; + *.rar) unrar l "$1";; + *.7z) 7z l "$1";; + *.pdf) pdftotext "$1" -;; + *) highlight -O ansi "$1";; +esac |