config/lf: add lf config from BrodieRobertson

https://github.com/BrodieRobertson/dotfiles/tree/master/config/lf
This commit is contained in:
xerus2000 2020-11-22 19:49:48 +01:00
parent bf40cdda9f
commit ef80431997
4 changed files with 387 additions and 0 deletions

67
.config/lf/draw_img Executable file
View File

@ -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

18
.config/lf/image Executable file
View File

@ -0,0 +1,18 @@
#!/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 "$@"

254
.config/lf/lfrc Normal file
View File

@ -0,0 +1,254 @@
set previewer ~/.config/lf/preview
# Basic Settings
set preview true
set hidden true
set color256 true
set drawbox true
set icons true
set ignorecase true
# Custom Functions
cmd open ${{
case $(file --mime-type "$f" -bL) in
text/*|application/json) editright "$f";;
video/*|image/*/application/pdf) xdg-open "$f";;
*) xdg-open "$f" ;;
esac
}}
cmd mkdir ${{
printf "Directory Name: "
read ans
mkdir -p $ans
}}
cmd mkfile ${{
printf "File Name: "
read ans
%editright $ans
}}
cmd chmod ${{
printf "Mode Bits: "
read ans
for file in "$fx"
do
chmod $ans $file
done
lf -remote 'send reload'
}}
cmd setwallpaper %cp "$f" ~/.config/wall.png && xwallpaper --zoom "$f"
cmd fzf_jump ${{
res="$(find . -maxdepth 3 | fzf --reverse --header='Jump to location')"
if [ -f "$res" ]; then
cmd="select"
elif [ -d "$res" ]; then
cmd="cd"
fi
lf -remote "send $id $cmd \"$res\""
}}
cmd broot_jump ${{
f=$(mktemp)
res="$(broot --outcmd $f && cat $f | sed 's/cd //')"
rm -f "$f"
if [ -f "$res" ]; then
cmd="select"
elif [ -d "$res" ]; then
cmd="cd"
fi
lf -remote "send $id $cmd \"$res\""
}}
cmd open_config ${{
$EDITOR $(bookmenu -b ~/.config/bookmenu/configs -f fzf -o)
}}
cmd dragon %dragon-drag-and-drop -a -x $fx
cmd dragon-stay %dragon-drag-and-drop -a $fx
cmd dragon-individual %dragon-drag-and-drop $fx
cmd dlfile %dlfile
# 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"
# Trash cli bindings
cmd trash ${{
files=$(printf "$fx" | tr '\n' ';')
while [ "$files" ]; do
# extract the substring from start of string up to delimiter.
# this is the first "element" of the string.
file=${files%%;*}
trash-put "$(basename "$file")"
# if there's only one element left, set `files` to an empty string.
# this causes us to exit this `while` loop.
# else, we delete the first "element" of the string from files, and move onto the next.
if [ "$files" = "$file" ]; then
files=''
else
files="${files#*;}"
fi
done
}}
cmd clear_trash %trash-empty
cmd restore_trash ${{
trash-restore
}}
cmd stripspace %stripspace "$f"
# Bindings
# Remove some defaults
map m
map o
map n
map "'"
map '"'
map d
map c
map e
map f
# Not really image preview
map - $~/.config/lf/draw_img "$f"
cmd video_preview ${{
CACHE=$(mktemp /tmp/thumb_cache.XXXXX)
ffmpegthumbnailer -i "$f" -o $CACHE -s 0
~/.config/lf/draw_img $CACHE && rm $CACHE
}}
map + :video_preview
# File Openers
map ee $$EDITOR "$f"
map u $view "$f"
# Archive Mappings
map az zip
map at tar
map ag targz
map ab targz
map au unarchive
# Trash Mappings
map dd trash
map tc clear_trash
map tr restore_trash
# Broot Mapping
map f broot_jump
# Dragon Mapping
map dr dragon
map ds dragon-stay
map di dragon-individual
map ss stripspace
# Basic Functions
map . set hidden!
map DD delete
map p paste
map x cut
map y copy
map <enter> open
map mf mkfile
map mr sudomkfile
map md mkdir
map ms $mkscript
map ch chmod
map bg setwallpaper
map o open_config
map br $vimv $fx
map r rename
map H top
map L bottom
map R reload
map C clear
map U unselect
# Movement
map gtr cd ~/.local/share/Trash/files
map gus cd /run/media/brodie
map gv. cd ~/videos
map gva cd ~/videos/anime
map gy. cd ~/videos/youtube
map gyt cd ~/videos/youtube/ToUpload
map gyu cd ~/videos/youtube/Uploaded
map gya cd ~/videos/youtube/asset
map go. cd ~/videos/podcast
map got cd ~/videos/podcast/ToUpload
map gou cd ~/videos/podcast/Uploaded
map gp. cd ~/pictures
map gpm cd ~/pictures/mpvscreenshots
map gpa cd ~/pictures/Anime
map gps cd ~/pictures/screenshots
map gw. cd ~/pictures/Wallpapers
map gww cd ~/pictures/Wallpapers/Wallpapers
map gwm cd ~/pictures/Wallpapers/MobileWallpapers
map gt. cd ~/documents/Textbooks
map gt1 cd ~/documents/Textbooks/1stYear
map gt2 cd ~/documents/Textbooks/2ndYear
map gt3 cd ~/documents/Textbooks/3rdYear
map gu3 cd ~/documents/Uni/3rdYear
map gd cd ~/documents
map gD cd ~/downloads
map ge cd ~/desktop
map gs. cd ~/scripts
map gsl cd ~/scripts/lf
map gsa cd ~/scripts/alsa
map gsi cd ~/scripts/i3
map gse cd ~/scripts/lemonbar
map gsp cd ~/scripts/polybar
map gsb cd ~/scripts/bspwm
map gsu cd ~/scripts/pulse
map gdt cd ~/scripts/transmission
map gr. cd ~/repos
map grb cd ~/repos/bookmenu
map grf cd ~/repos/cleanfullscreen
map grm cd ~/repos/dmenu
map grd cd ~/repos/dotfiles
map gri cd ~/repos/init
map grk cd ~/repos/kanban-board
map grl cd ~/repos/lbryurlconvert
map grP cd ~/repos/PerlProjects
map grr cd ~/repos/reading-list
map grs cd ~/repos/st
map grw cd ~/repos/website
map gc cd ~/.config
map gC cd ~/.local/share/cell
map gl cd ~/.local
map gE cd /etc
map gU. cd /usr
map gUs cd /usr/share
map md kdir
map br $vimv $fx

48
.config/lf/preview Executable file
View File

@ -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