From d6588fc835aff6d952d86b1bdc5ed7378a846ab9 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sun, 3 Dec 2017 03:06:10 +0900 Subject: [bash-completion] Fix custom completion with dynamic loader enabled After _completion_loader is called, instead of loading the entire completion.bash file, just restore the fzf completion for the current command. `_fzf_orig_completion_$cmd` is only set if _completion_loader actually changed the completion options to avoid infinite loop. Close #1170 --- shell/completion.bash | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'shell') diff --git a/shell/completion.bash b/shell/completion.bash index 445df178..d2287c84 100644 --- a/shell/completion.bash +++ b/shell/completion.bash @@ -113,7 +113,7 @@ _fzf_opts_completion() { } _fzf_handle_dynamic_completion() { - local cmd orig_var orig ret orig_cmd + local cmd orig_var orig ret orig_cmd orig_complete cmd="$1" shift orig_cmd="$1" @@ -122,10 +122,14 @@ _fzf_handle_dynamic_completion() { if [ -n "$orig" ] && type "$orig" > /dev/null 2>&1; then $orig "$@" elif [ -n "$_fzf_completion_loader" ]; then + orig_complete=$(complete -p "$cmd") _completion_loader "$@" ret=$? - eval "$(complete | command grep "\-F.* $orig_cmd$" | _fzf_orig_completion_filter)" - source "${BASH_SOURCE[0]}" + # _completion_loader may not have updated completion for the command + if [ "$(complete -p "$cmd")" != "$orig_complete" ]; then + eval "$(complete | command grep "\-F.* $orig_cmd$" | _fzf_orig_completion_filter)" + eval "$orig_complete" + fi return $ret fi } -- cgit v1.2.3