summaryrefslogtreecommitdiff
path: root/.config/lf/lfrc
diff options
context:
space:
mode:
Diffstat (limited to '.config/lf/lfrc')
-rw-r--r--.config/lf/lfrc160
1 files changed, 160 insertions, 0 deletions
diff --git a/.config/lf/lfrc b/.config/lf/lfrc
new file mode 100644
index 0000000..daf9b1f
--- /dev/null
+++ b/.config/lf/lfrc
@@ -0,0 +1,160 @@
+# interpreter for shell commands
+set shell sh
+
+# set '-eu' options for shell commands
+# These options are used to have safer shell commands. Option '-e' is used to
+# exit on error and option '-u' is used to give error for unset variables.
+# Option '-f' disables pathname expansion which can be useful when $f, $fs, and
+# $fx variables contain names with '*' or '?' characters. However, this option
+# is used selectively within individual commands as it can be limiting at
+# times.
+set shellopts '-eu'
+
+# set internal field separator (IFS) to "\n" for shell commands
+# This is useful to automatically split file names in $fs and $fx properly
+# since default file separator used in these variables (i.e. 'filesep' option)
+# is newline. You need to consider the values of these options and create your
+# commands accordingly.
+set ifs "\n"
+
+# leave some space at the top and the bottom of the screen
+set scrolloff 5
+
+# Basic Settings
+set hidden true
+#set drawbox true
+set icons true
+set ignorecase true
+set smartcase true
+set mouse
+set previewer preview
+set preview
+
+cmd open $$OPENER $f
+
+cmd on-cd &{{
+ sed -i "\|^$PWD$|d" ${XDG_DATA_HOME:-$HOME/.local/share}/cdhist
+ echo "$PWD" >> ${XDG_DATA_HOME:-$HOME/.local/share}/cdhist
+}}
+
+cmd extract ${{
+ # extract the current file with the right command
+ # (xkcd link: https://xkcd.com/1168/)
+ set -f
+ for f in $fx; do case "$f" in
+ *.tar) tar xvf "$f" ;;
+ *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf "$f" ;;
+ *.tar.gz|*.tgz) tar xzvf "$f" ;;
+ *.tar.xz|*.txz) tar xJvf "$f" ;;
+ *.gz) gunzip "$f" ;;
+ *.zip) unzip "$f" ;;
+ *.rar) unrar x "$f" ;;
+ *.7z) 7z x "$f" ;;
+ *.zst) unzstd "$f" ;;
+ *) echo "Unsupported format" >&2; exit 1 ;;
+ esac done
+}}
+
+cmd link_index %{{
+ case "$f" in
+ *.html) index="index.html" ;;
+ *) echo "Unsupported file"; exit 1 ;;
+ esac
+ [ -e "$index" ] && [ ! -L "$index" ] && {
+ echo "Failed: $index already exists and is not a symbolic link"
+ exit
+ }
+ ln -sf "$f" "$index"
+}}
+
+cmd select_eval ${{
+ res="$(eval "$@")"
+ [ -d "$res" ] &&
+ lf -remote "send $id cd \"$res\"" ||
+ lf -remote "send $id select \"$res\""
+}}
+
+cmd link %{{
+ set -- $(cat ~/.local/share/lf/files)
+ mode="$1"
+ shift
+ [ "$#" -lt 1 ] &&
+ { lf -remote "send $id echo no files to link"; exit 0; }
+ case "$mode" in
+ copy) ln -sr -t . -- "$@";;
+ move) ln -t . -- "$@";;
+ esac
+ rm ~/.local/share/lf/files
+ lf -remote "send clear"
+}}
+
+# Basic Functions
+cmap <tab> cmd-menu-complete
+cmap <backtab> cmd-menu-complete-back
+map <enter> shell
+map <delete> trash
+map <c-space> set preview!
+map <c-n> push $mkdir<space>""<c-b>
+map <a-s> :source ~/.config/lf/lfrc
+map <tab> :toggle; down
+map <backtab> :toggle; up
+map Z :toggle; up
+map <c-j> select_eval "fzf --reverse --header-first --header='Jump to location'"
+map <backspace> ${{ lf -remote "send $id select \"$(cat ${XDG_DATA_HOME:-$HOME/.local/share}/openhist |
+ fzf --tac --reverse --header-first --header='File History')\"" }}
+map <c-k> ${{ lf -remote "send $id cd \"$(cat ${XDG_DATA_HOME:-$HOME/.local/share}/cdhist |
+ fzf --tac --reverse --header-first --header='Path History')\"" }}
+map <c-c> ${{ lf -remote "send $id cd \"$(find -mindepth 1 -type d |
+ fzf --reverse --header-first --header='Jump to directory')\"" }}
+
+map c
+map d
+map I :rename; cmd-home
+map i :rename
+map a :rename; cmd-right
+map A :rename; cmd-end
+map S push A<c-u>
+map o $LESSOPEN="|preview %s" less $f
+map O $mimeopen --ask $f
+map . set hidden!
+map x cut
+map M $lf -remote "send $id select \"$(fmd)\""
+map D delete
+map W $setsid -f $TERMINAL >/dev/null 2>&1
+map X !$f
+map T !dev test $f
+map b $vidir
+map V push :!nvim<space>""<c-b>
+map P :link
+
+map ge extract $f
+map gl clear
+map gx ${{ chmod u+x $fx; lf -remote "send $id reload"; }}
+map gX ${{ chmod -x $fx; lf -remote "send $id reload"; }}
+map gm push $chmod<space>--<space>$fx<c-a><a-f><space>
+map gL %lf -remote "send ${id} select '$(readlink $f)'"
+map gd !du -hd1
+map gf !file $f
+map gy %{{ printf "%s" "$f" | xsel -b }}
+map gY %{{ printf "%s" "$fs" | xsel -b }}
+map gi link_index
+map gsh $setbg $f
+map gsl $setbg -l $f
+map zpp set previewer preview
+map zpc set previewer cat
+map zpb set previewer preview-bat
+map zph set previewer preview-highlight
+
+# Trash Mappings
+map dd ${{ echo "$fx" | xargs -I{} trash-put "{}" }}
+map dtc $trash-empty
+map dtr $trash-restore
+# Dragon Mapping
+map dr %dragon-drop -a -x $fx
+map ds %dragon-drop -a $fx
+map di %dragon-drop $fx
+map dm %cpdragon
+map dc %mvdragon
+map dl %dlfile
+
+source ~/.config/lf/shortcutrc