zsh completion: Add support for per-command completion triggers.

Allow users to configure custom completion triggers on a per-command
basis. For example, if FZF_COMPLETION_TRIGGER='**' and
FZF_PER_CMD_COMPLETION_TRIGGERS[ssh]='', then:

ssh<space><tab> triggers fzf completion.

but

ls<space><tab> will not.
pull/1299/head
Ricky Zhou 6 years ago
parent f931e53890
commit 22ba58b0a8

@ -4,10 +4,11 @@
# / __/ / /_/ __/
# /_/ /___/_/ completion.zsh
#
# - $FZF_TMUX (default: 0)
# - $FZF_TMUX_OPTS (default: '-d 40%')
# - $FZF_COMPLETION_TRIGGER (default: '**')
# - $FZF_COMPLETION_OPTS (default: empty)
# - $FZF_TMUX (default: 0)
# - $FZF_TMUX_OPTS (default: '-d 40%')
# - $FZF_COMPLETION_TRIGGER (default: '**')
# - $FZF_PER_CMD_COMPLETION_TRIGGERS (default: none)
# - $FZF_COMPLETION_OPTS (default: empty)
# Both branches of the following `if` do the same thing -- define
# __fzf_completion_options such that `eval $__fzf_completion_options` sets
@ -274,8 +275,11 @@ fzf-completion() {
cmd=$(__fzf_extract_command "$LBUFFER")
# Use a per-command completion trigger if available. Otherwise, fall
# back to $FZF_COMPLETION_TRIGGER.
trigger=${FZF_PER_CMD_COMPLETION_TRIGGERS[$cmd]-${FZF_COMPLETION_TRIGGER-'**'}}
# Explicitly allow for empty trigger.
trigger=${FZF_COMPLETION_TRIGGER-'**'}
[ -z "$trigger" -a ${LBUFFER[-1]} = ' ' ] && tokens+=("")
# When the trigger starts with ';', it becomes a separate token

@ -2648,6 +2648,14 @@ class TestZsh < TestBase
tmux.send_keys 'C-c'
end
end
def test_per_cmd_completion_triggers
tmux.send_keys 'declare -A FZF_PER_CMD_COMPLETION_TRIGGERS', :Enter
tmux.send_keys 'FZF_PER_CMD_COMPLETION_TRIGGERS[ls]=""', :Enter
tmux.send_keys 'ls /', :Tab
tmux.until { |lines| assert_operator lines.match_count, :>, 0 }
tmux.send_keys :Enter
end
end
class TestFish < TestBase

Loading…
Cancel
Save