|
@@ -1,111 +1,130 @@
|
|
|
-# interpreter for shell commands (needs to be POSIX compatible)
|
|
|
-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.
|
|
|
+# Luke's lf settings
|
|
|
+
|
|
|
+
|
|
|
+# Note on Image Previews
|
|
|
+# For those wanting image previews, like this system, there are four steps to
|
|
|
+# set it up. These are done automatically for LARBS users, but I will state
|
|
|
+# them here for others doing it manually.
|
|
|
+#
|
|
|
+# 1. ueberzug must be installed.
|
|
|
+# 2. The scope file (~/.config/lf/scope for me), must have a command similar to
|
|
|
+# mine to generate ueberzug images.
|
|
|
+# 3. A `set cleaner` line as below is a cleaner script.
|
|
|
+# 4. lf should be started through a wrapper script (~/.local/bin/lfub for me)
|
|
|
+# that creates the environment for ueberzug. This command can be be aliased
|
|
|
+# in your shellrc (`alias lf="lfub") or if set to a binding, should be
|
|
|
+# called directly instead of normal lf.
|
|
|
+
|
|
|
+# Basic vars
|
|
|
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 10
|
|
|
+set icons
|
|
|
+set period 1
|
|
|
+set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
|
|
|
+set cleaner '~/.config/lf/cleaner'
|
|
|
+set previewer '~/.config/lf/scope'
|
|
|
|
|
|
-# use enter for shell commands
|
|
|
-map <enter> shell
|
|
|
-
|
|
|
-# execute current file (must be executable)
|
|
|
-map x $$f
|
|
|
-map X !$f
|
|
|
-
|
|
|
-# dedicated keys for file opener actions
|
|
|
-map o &mimeopen $f
|
|
|
-map O $mimeopen --ask $f
|
|
|
-
|
|
|
-# custom fnc binding
|
|
|
-map b $~/.scripts/fnc $f
|
|
|
-
|
|
|
-# define a custom 'open' command
|
|
|
-# This command is called when current file is not a directory. You may want to
|
|
|
-# use either file extensions and/or mime types here. Below uses an editor for
|
|
|
-# text files and a file opener for the rest.
|
|
|
+# cmds/functions
|
|
|
cmd open ${{
|
|
|
- case "${f##*.}" in
|
|
|
- xopp) devour xournalpp $f;;
|
|
|
- mp3) mpv $f;;
|
|
|
- pdf) devour llpp $f > /dev/null 2> /dev/null &disown;;
|
|
|
- epub) llpp $f > /dev/null 2> /dev/null &disown;;
|
|
|
- sc) sc-im $f;;
|
|
|
- *)
|
|
|
- case $(file --mime-type $f -b) in
|
|
|
- text/*) $EDITOR $fx;;
|
|
|
- image/*) sxiv $f &;;
|
|
|
- *) for f in $fx; do setsid $OPENER $f > /dev/null 2> /dev/null & done;;
|
|
|
- esac;;
|
|
|
+ case $(file --mime-type "$(readlink -f $f)" -b) in
|
|
|
+ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) localc $fx ;;
|
|
|
+ image/vnd.djvu|application/pdf|application/octet-stream|application/postscript) setsid -f zathura $fx >/dev/null 2>&1 ;;
|
|
|
+ text/*|application/json|inode/x-empty) $EDITOR $fx;;
|
|
|
+ image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;;
|
|
|
+ image/svg+xml) display -- $f ;;
|
|
|
+ image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|tif\|ico\)\(_large\)*$" |
|
|
|
+ setsid -f sxiv -aio 2>/dev/null | while read -r file; do
|
|
|
+ [ -z "$file" ] && continue
|
|
|
+ lf -remote "send select \"$file\""
|
|
|
+ lf -remote "send toggle"
|
|
|
+ done &
|
|
|
+ ;;
|
|
|
+ audio/*) mpv --audio-display=no $f ;;
|
|
|
+ video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
|
|
|
+ application/pdf|application/vnd*|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;;
|
|
|
+ application/pgp-encrypted) $EDITOR $fx ;;
|
|
|
+ xopp) devour xournalpp $f;;
|
|
|
+ sc) sc-im $f;;
|
|
|
+ *) for f in $fx; do setsid -f $OPENER $f >/dev/null 2>&1; done;;
|
|
|
esac
|
|
|
}}
|
|
|
|
|
|
-# define a custom 'rename' command without prompt for overwrite
|
|
|
-# cmd rename %[ -e $1 ] && printf "file exists" || mv $f $1
|
|
|
-# map r push :rename<space>
|
|
|
-
|
|
|
-# make sure trash folder exists
|
|
|
-# %mkdir -p ~/.trash
|
|
|
-
|
|
|
-# move current file or selected files to trash folder
|
|
|
-# (also see 'man mv' for backup/overwrite options)
|
|
|
-cmd trash %set -f; mv $fx ~/.trash
|
|
|
-
|
|
|
-# define a custom 'delete' command
|
|
|
-# cmd delete ${{
|
|
|
-# set -f
|
|
|
-# printf "$fx\n"
|
|
|
-# printf "delete?[y/n]"
|
|
|
-# read ans
|
|
|
-# [ $ans = "y" ] && rm -rf $fx
|
|
|
-# }}
|
|
|
+cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')"
|
|
|
|
|
|
-# use '<delete>' key for either 'trash' or 'delete' command
|
|
|
-# map <delete> trash
|
|
|
-# map <delete> delete
|
|
|
-
|
|
|
-# extract the current file with the right command
|
|
|
-# (xkcd link: https://xkcd.com/1168/)
|
|
|
cmd extract ${{
|
|
|
- set -f
|
|
|
- case $f in
|
|
|
- *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;;
|
|
|
- *.tar.gz|*.tgz) tar xzvf $f;;
|
|
|
- *.tar.xz|*.txz) tar xJvf $f;;
|
|
|
- *.zip) unzip $f;;
|
|
|
- *.rar) unrar x $f;;
|
|
|
- *.7z) 7z x $f;;
|
|
|
- esac
|
|
|
+ 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 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
|
|
|
}}
|
|
|
|
|
|
-# compress current file or selected files with tar and gunzip
|
|
|
-cmd tar ${{
|
|
|
- set -f
|
|
|
- mkdir $1
|
|
|
- cp -r $fx $1
|
|
|
- tar czf $1.tar.gz $1
|
|
|
- rm -rf $1
|
|
|
+cmd moveto ${{
|
|
|
+ clear; tput cup $(($(tput lines)/3)); tput bold
|
|
|
+ set -f
|
|
|
+ clear; echo "Move to where?"
|
|
|
+ dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" &&
|
|
|
+ for x in $fx; do
|
|
|
+ eval mv -iv \"$x\" \"$dest\"
|
|
|
+ done &&
|
|
|
+ notify-send "🚚 File(s) moved." "File(s) moved to $dest."
|
|
|
}}
|
|
|
|
|
|
-# compress current file or selected files with zip
|
|
|
-cmd zip ${{
|
|
|
- set -f
|
|
|
- mkdir $1
|
|
|
- cp -r $fx $1
|
|
|
- zip -r $1.zip $1
|
|
|
- rm -rf $1
|
|
|
+cmd copyto ${{
|
|
|
+ clear; tput cup $(($(tput lines)/3)); tput bold
|
|
|
+ set -f
|
|
|
+ clear; echo "Copy to where?"
|
|
|
+ dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" &&
|
|
|
+ for x in $fx; do
|
|
|
+ eval cp -ivr \"$x\" \"$dest\"
|
|
|
+ done &&
|
|
|
+ notify-send "📋 File(s) copied." "File(s) copies to $dest."
|
|
|
}}
|
|
|
+
|
|
|
+cmd setbg "$1"
|
|
|
+cmd bulkrename $vidir
|
|
|
+
|
|
|
+# Bindings
|
|
|
+map <c-f> $lf -remote "send $id select '$(fzf)'"
|
|
|
+map J $lf -remote "send $id cd $(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf)"
|
|
|
+map gh
|
|
|
+map g top
|
|
|
+map D delete
|
|
|
+map E extract
|
|
|
+map C copyto
|
|
|
+map M moveto
|
|
|
+map <c-n> push :mkdir<space>
|
|
|
+map <c-r> reload
|
|
|
+map <c-s> set hidden!
|
|
|
+map <enter> shell
|
|
|
+map x $$f
|
|
|
+map X !$f
|
|
|
+map o &mimeopen $f
|
|
|
+map O $mimeopen --ask $f
|
|
|
+
|
|
|
+map A rename # at the very end
|
|
|
+map c push A<c-u> # new rename
|
|
|
+map I push A<c-a> # at the very beginning
|
|
|
+map i push A<a-b><a-b><a-f> # before extention
|
|
|
+map a push A<a-b> # after extention
|
|
|
+map B bulkrename
|
|
|
+map b $setbg $f
|
|
|
+
|
|
|
+map <c-e> down
|
|
|
+map <c-y> up
|
|
|
+map V push :!nvim<space>
|
|
|
+
|
|
|
+map W $setsid -f $TERMINAL >/dev/null 2>&1
|
|
|
+
|
|
|
+map Y $printf "%s" "$fx" | xclip -selection clipboard
|