-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlfrc
156 lines (130 loc) · 4.28 KB
/
lfrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
set info size:time
# 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 10
# Use the `dim` attribute instead of underline for the cursor in the preview pane
set cursorpreviewfmt "\033[7;2m"
# use enter for shell commands
map <enter> shell
# show the result of execution of previous commands
map ` !true
# 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
# # 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.
# cmd open &{{
# case $(file --mime-type -Lb $f) in
# text/*) lf -remote "send $id \$$EDITOR \$fx";;
# *) for f in $fx; do $OPENER $f > /dev/null 2> /dev/null & done;;
# esac
# }}
cmd open ${{
set -f
filesize=$(stat -f%z "$f")
case "$f" in
*.json)
jq . "$f" | bat --paging=always --file-name "$f"
;;
*.log|*.log.[0-9]*)
bat --paging=always "$f"
;;
*)
if [ "$filesize" -gt 2097152 ]; then
bat --paging=always "$f"
else
# echo "Launching: nvim $f" >> ~/.lf_launches.log
nvim "$f"
fi
;;
esac
}}
# let's make any file that has ".log" extension (or any extension like .log.1) open in bat, and the rest in neovim.
# Furthermore if a file is over 2MB if it would open with neovim open it with bat anyway. please make that the behavior
# cmd open ${{
# case $(file --mime-type "$f" -b) in
# application/json) jq . "$fx"
# text/*) $EDITOR "$fx";;
# *) bat --paging=always "$fx";;
# esac
# }}
# mkdir command. See wiki if you want it to select created dir
map a :push %mkdir<space>
# 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
# }}
# use '<delete>' key for either 'trash' or 'delete' command
# map <delete> trash
# map <delete> delete
set previewer bat-lf-previewer
# --- Additions for Scrollable Previews ---
cmd on-select :set user_preview_offset 1
cmd scroll-preview &{{
offset=$(( $lf_user_preview_offset + $1 ))
[ $offset -lt 1 ] && offset=1
lf -remote "send $id :set user_preview_offset $offset; set preview true"
}}
map J scroll-preview 5
map K scroll-preview -5
# 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
}}
# 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
}}
# 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
}}