10
10
# - $FZF_COMPLETION_TRIGGER (default: '**')
11
11
# - $FZF_COMPLETION_OPTS (default: empty)
12
12
13
+ # To use custom commands instead of find, override _fzf_compgen_{path,dir}
14
+ if ! declare -f _fzf_compgen_path > /dev/null; then
15
+ _fzf_compgen_path () {
16
+ echo " $1 "
17
+ \f ind -L " $1 " \
18
+ -name .git -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \
19
+ -a -not -path " $1 " -print 2> /dev/null | sed ' s@^\./@@'
20
+ }
21
+ fi
22
+
23
+ if ! declare -f _fzf_compgen_dir > /dev/null; then
24
+ _fzf_compgen_dir () {
25
+ \f ind -L " $1 " \
26
+ -name .git -prune -o -name .svn -prune -o -type d \
27
+ -a -not -path " $1 " -print 2> /dev/null | sed ' s@^\./@@'
28
+ }
29
+ fi
30
+
31
+ # ##########################################################
32
+
13
33
_fzf_orig_completion_filter () {
14
34
sed ' s/^\(.*-F\) *\([^ ]*\).* \([^ ]*\)$/export _fzf_orig_completion_\3="\1 %s \3 #\2";/' |
15
35
awk -F= ' {gsub(/[^a-z0-9_= ;]/, "_", $1); print $1"="$2}'
@@ -113,7 +133,7 @@ __fzf_generic_path_completion() {
113
133
[ -z " $dir " ] && dir=' .'
114
134
[ " $dir " != " /" ] && dir=" ${dir/% \/ / } "
115
135
tput sc
116
- matches=$( \f ind -L " $dir " $1 -a -not -path " $dir " -print 2> /dev/null | sed ' s@^\./@@ ' | $fzf $FZF_COMPLETION_OPTS $2 -q " $leftover " | while read item; do
136
+ matches=$( eval " $1 $( printf %q " $dir " ) " | $fzf $FZF_COMPLETION_OPTS $2 -q " $leftover " | while read item; do
117
137
printf " %q$3 " " $item "
118
138
done)
119
139
matches=${matches% }
@@ -171,21 +191,16 @@ _fzf_complete() {
171
191
}
172
192
173
193
_fzf_path_completion () {
174
- __fzf_generic_path_completion \
175
- " -name .git -prune -o -name .svn -prune -o ( -type d -o -type f -o -type l )" \
176
- " -m" " " " $@ "
194
+ __fzf_generic_path_completion _fzf_compgen_path " -m" " " " $@ "
177
195
}
178
196
197
+ # Deprecated. No file only completion.
179
198
_fzf_file_completion () {
180
- __fzf_generic_path_completion \
181
- " -name .git -prune -o -name .svn -prune -o ( -type f -o -type l )" \
182
- " -m" " " " $@ "
199
+ _fzf_path_completion " $@ "
183
200
}
184
201
185
202
_fzf_dir_completion () {
186
- __fzf_generic_path_completion \
187
- " -name .git -prune -o -name .svn -prune -o -type d" \
188
- " " " /" " $@ "
203
+ __fzf_generic_path_completion _fzf_compgen_dir " " " /" " $@ "
189
204
}
190
205
191
206
_fzf_complete_kill () {
@@ -239,13 +254,12 @@ _fzf_complete_unalias() {
239
254
# fzf options
240
255
complete -o default -F _fzf_opts_completion fzf
241
256
242
- d_cmds=" cd pushd rmdir"
243
- f_cmds ="
257
+ d_cmds=" ${FZF_COMPLETION_DIR_COMMANDS :- cd pushd rmdir} "
258
+ a_cmds ="
244
259
awk cat diff diff3
245
260
emacs emacsclient ex file ftp g++ gcc gvim head hg java
246
261
javac ld less more mvim nvim patch perl python ruby
247
- sed sftp sort source tail tee uniq vi view vim wc xdg-open"
248
- a_cmds="
262
+ sed sftp sort source tail tee uniq vi view vim wc xdg-open
249
263
basename bunzip2 bzip2 chmod chown curl cp dirname du
250
264
find git grep gunzip gzip hg jar
251
265
ln ls mv open rm rsync scp
@@ -256,7 +270,7 @@ x_cmds="kill ssh telnet unset unalias export"
256
270
if [ " $_fzf_completion_loaded " != ' 0.10.8' ]; then
257
271
# Really wish I could use associative array but OSX comes with bash 3.2 :(
258
272
eval $( complete | \g rep ' \-F' | \g rep -v _fzf_ |
259
- \g rep -E " ($( echo $d_cmds $f_cmds $ a_cmds $x_cmds | sed ' s/ /|/g' | sed ' s/+/\\+/g' ) )$" | _fzf_orig_completion_filter)
273
+ \g rep -E " ($( echo $d_cmds $a_cmds $x_cmds | sed ' s/ /|/g' | sed ' s/+/\\+/g' ) )$" | _fzf_orig_completion_filter)
260
274
export _fzf_completion_loaded=0.10.8
261
275
fi
262
276
@@ -278,21 +292,16 @@ _fzf_defc() {
278
292
fi
279
293
}
280
294
281
- # Directory
282
- for cmd in $d_cmds ; do
283
- _fzf_defc " $cmd " _fzf_dir_completion " -o nospace -o plusdirs"
284
- done
285
-
286
- # File
287
- for cmd in $f_cmds ; do
288
- _fzf_defc " $cmd " _fzf_file_completion " -o default -o bashdefault"
289
- done
290
-
291
295
# Anything
292
296
for cmd in $a_cmds ; do
293
297
_fzf_defc " $cmd " _fzf_path_completion " -o default -o bashdefault"
294
298
done
295
299
300
+ # Directory
301
+ for cmd in $d_cmds ; do
302
+ _fzf_defc " $cmd " _fzf_dir_completion " -o nospace -o plusdirs"
303
+ done
304
+
296
305
unset _fzf_defc
297
306
298
307
# Kill completion
@@ -307,4 +316,4 @@ complete -F _fzf_complete_unset -o default -o bashdefault unset
307
316
complete -F _fzf_complete_export -o default -o bashdefault export
308
317
complete -F _fzf_complete_unalias -o default -o bashdefault unalias
309
318
310
- unset cmd d_cmds f_cmds a_cmds x_cmds
319
+ unset cmd d_cmds a_cmds x_cmds
0 commit comments