#!/usr/bin/env fish # Not meant to actually be executable in fish, but it looks like lf config # uses fish syntax, so the shebang helps treesitter highlighting properly ## LF VARS set shellopts '-eu' # Treat undefined env vars as errors. Exit upon error. set ifs "\n" set scrolloff 10 set icons # Use icons set period 1 # Poll directory status every X seconds set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml" set cleaner '~/.config/lf/cleaner' # Clear preview set previewer '~/.config/lf/previewer' # Make preview set autoquit true ## MAPPINGS # LF control mappings map reload map set hidden! map shell # Opening commands map l open map L open new_window map o $mimeopen --ask "$f" # CRUD commands map D delete map N push :mkdir map n push :touch map u extract map Y $printf "%s" "$fx" | xclip -selection clipboard # Renaming commands map A :rename; cmd-end # at the very end map a :rename; cmd-right # after extension map c push A # new rename map i :rename # before extension map I :rename; cmd-home # at the very beginning # Fuzzy finding map $lf -remote "send $id select \"$(fzf)\"" map F broot_jump ## COMMAND DEFINITIONS cmd touch %touch $1 && lf -remote "send $id load" && lf -remote "send $id select $1" cmd mkdir %mkdir $1 && lf -remote "send $id load" && lf -remote "send $id select $1" cmd delete ${{ clear; tput cup $(($(tput lines)/3)); tput bold set -f printf "%s\n\t" "$fx" printf "delete?[y/N]" read ans [ $ans = "y" ] && rm -rf -- $fx }} cmd extract ${{ clear; tput cup $(($(tput lines)/3)); tput bold set -f printf "%s\n\t" "$fx" printf "extract?[y/N]" read ans [ $ans = "y" ] && aunpack $fx }} 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 ${{ # Set $new_window based on arguments test ! -z $@ && test "$@" = "new_window" && new_window=1 case $(file --mime-type "$(readlink -f $f)" -b) in application/json|\ application/x-subrip|\ application/pgp-encrypted|\ inode/x-empty|\ text/*) test -v new_window \ && ($TERMINAL -e $SHELL -c "$EDITOR \"$fx\"" >/dev/null 2>&1 &) \ || ($EDITOR $fx) ;; audio/*|video/x-ms-asf) mpv --audio-display=no $f ;; video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;; application/epub*|\ application/octet-stream|\ application/pdf|\ application/postscript|\ application/vnd.djvu|\ image/vnd.djvu) setsid -f $(test ! -v new_window && echo devour) zathura $fx >/dev/null 2>&1 ;; image/*) find . -maxdepth 1 -type f -exec file -i {} \; | grep -E 'image/.*' | awk -F: '{ print substr($0, 1, length($0) - length($NF) - 1) }' | rotdir $f | setsid -f $(test ! -v new_window && echo devour) nsxiv -aio 2>/dev/null | while read -r file; do [ -z "$file" ] && continue lf -remote "send select \"$file\"" lf -remote "send toggle" done & ;; application/octet-stream|\ application/vnd.ms-powerpoint|\ application/vnd.oasis.opendocument.database|\ application/vnd.oasis.opendocument.formula|\ application/vnd.oasis.opendocument.graphics|\ application/vnd.oasis.opendocument.graphics-template|\ application/vnd.oasis.opendocument.presentation|\ application/vnd.oasis.opendocument.presentation-template|\ application/vnd.oasis.opendocument.spreadsheet|\ application/vnd.oasis.opendocument.spreadsheet-template|\ application/vnd.oasis.opendocument.text|\ application/vnd.openxmlformats-officedocument.presentationml.presentation|\ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet|\ application/vnd.openxmlformats-officedocument.wordprocessingml.document) setsid -f $(test ! -v new_window && echo devour) libreoffice $fx >/dev/null 2>&1 ;; *) # test -v new_window \ # && () \ # || () ;; esac }} cmd open_new_window ${{ new_window=1 && cmd open }}