diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2013-11-23 20:09:56 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2013-11-23 20:12:14 +0900 |
| commit | f660ad35b2a28fd21778ba0a80e880e27ab32a9b (patch) | |
| tree | 902fd415154dcbd4e0e9707979f39db5ea98b0d9 /fzf-completion.bash | |
| parent | c61738ae43c06831efb932a68a63868c46892f30 (diff) | |
| download | fzf-f660ad35b2a28fd21778ba0a80e880e27ab32a9b.tar.gz | |
Improve bash completion: `[DIRECTORY/][FUZZY_PATTERN]**<TAB>`
Diffstat (limited to 'fzf-completion.bash')
| -rw-r--r-- | fzf-completion.bash | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/fzf-completion.bash b/fzf-completion.bash index e52a8f94..bdb8568e 100644 --- a/fzf-completion.bash +++ b/fzf-completion.bash @@ -31,31 +31,37 @@ _fzf_opts_completion() { } _fzf_generic_completion() { - local cur prev opts base matches + local cur prev opts base dir leftover matches COMPREPLY=() FZF_COMPLETION_TRIGGER=${FZF_COMPLETION_TRIGGER:-**} cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" if [[ ${cur} == *"$FZF_COMPLETION_TRIGGER" ]]; then base=${cur:0:${#cur}-${#FZF_COMPLETION_TRIGGER}} - base=${base%/} eval base=$base - find_opts="-name .git -prune -o -name .svn -prune -o" - if [ -z "$base" -o -d "$base" ]; then - matches=$(find ${base:-*} $1 2> /dev/null | fzf $FZF_COMPLETION_OPTS $2 | while read item; do - if [[ ${item} =~ \ ]]; then - echo -n "\"$item\" " - else - echo -n "$item " + dir="$base" + while [ 1 ]; do + if [ -z "$dir" -o -d "$dir" ]; then + leftover=${base/#"$dir"} + leftover=${leftover/#\/} + [ "$dir" = '.' ] && dir='' + matches=$(find "$dir"* $1 2> /dev/null | fzf $FZF_COMPLETION_OPTS $2 -q "$leftover" | while read item; do + if [[ ${item} =~ \ ]]; then + echo -n "\"$item\" " + else + echo -n "$item " + fi + done) + matches=${matches% } + if [ -n "$matches" ]; then + COMPREPLY=( "$matches" ) + return 0 fi - done) - matches=${matches% } - if [ -n "$matches" ]; then - COMPREPLY=( "$matches" ) - return 0 + return 1 fi - fi + dir=$(dirname "$dir") + done fi } |
