mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-11-29 00:06:29 +00:00
[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
This commit is contained in:
parent
5a7b41a2cf
commit
d6588fc835
@ -113,7 +113,7 @@ _fzf_opts_completion() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_fzf_handle_dynamic_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"
|
cmd="$1"
|
||||||
shift
|
shift
|
||||||
orig_cmd="$1"
|
orig_cmd="$1"
|
||||||
@ -122,10 +122,14 @@ _fzf_handle_dynamic_completion() {
|
|||||||
if [ -n "$orig" ] && type "$orig" > /dev/null 2>&1; then
|
if [ -n "$orig" ] && type "$orig" > /dev/null 2>&1; then
|
||||||
$orig "$@"
|
$orig "$@"
|
||||||
elif [ -n "$_fzf_completion_loader" ]; then
|
elif [ -n "$_fzf_completion_loader" ]; then
|
||||||
|
orig_complete=$(complete -p "$cmd")
|
||||||
_completion_loader "$@"
|
_completion_loader "$@"
|
||||||
ret=$?
|
ret=$?
|
||||||
eval "$(complete | command grep "\-F.* $orig_cmd$" | _fzf_orig_completion_filter)"
|
# _completion_loader may not have updated completion for the command
|
||||||
source "${BASH_SOURCE[0]}"
|
if [ "$(complete -p "$cmd")" != "$orig_complete" ]; then
|
||||||
|
eval "$(complete | command grep "\-F.* $orig_cmd$" | _fzf_orig_completion_filter)"
|
||||||
|
eval "$orig_complete"
|
||||||
|
fi
|
||||||
return $ret
|
return $ret
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -1761,6 +1761,27 @@ class TestBash < TestBase
|
|||||||
super
|
super
|
||||||
@tmux = Tmux.new :bash
|
@tmux = Tmux.new :bash
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_dynamic_completion_loader
|
||||||
|
tmux.paste 'touch /tmp/foo; _fzf_completion_loader=1'
|
||||||
|
tmux.paste '_completion_loader() { complete -o default fake; }'
|
||||||
|
tmux.paste 'complete -F _fzf_path_completion -o default -o bashdefault fake'
|
||||||
|
tmux.send_keys 'fake /tmp/foo**', :Tab
|
||||||
|
tmux.until do |lines|
|
||||||
|
lines.item_count.positive? && lines.item_count == lines.match_count
|
||||||
|
end
|
||||||
|
tmux.send_keys 'C-c'
|
||||||
|
|
||||||
|
tmux.prepare
|
||||||
|
tmux.send_keys 'fake /tmp/foo'
|
||||||
|
tmux.send_keys :Tab , 'C-u'
|
||||||
|
|
||||||
|
tmux.prepare
|
||||||
|
tmux.send_keys 'fake /tmp/foo**', :Tab
|
||||||
|
tmux.until do |lines|
|
||||||
|
lines.item_count.positive? && lines.item_count == lines.match_count
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class TestZsh < TestBase
|
class TestZsh < TestBase
|
||||||
|
Loading…
Reference in New Issue
Block a user