mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2024-11-18 09:51:06 +01:00
Allow skipping completion suggestions when buffer matches a pattern
Set ZSH_AUTOSUGGEST_COMPLETION_IGNORE to a glob pattern to have the completion suggestion strategy never make suggestions when the buffer matches the pattern. This can be helpful when some completion routines you have are particularly expensive and you want to prevent them from running automatically on every keystroke. See GitHub issue #463.
This commit is contained in:
parent
bdbe43e667
commit
7afb7364f1
4 changed files with 42 additions and 1 deletions
|
@ -93,6 +93,12 @@ Set `ZSH_AUTOSUGGEST_HISTORY_IGNORE` to a glob pattern to prevent offering sugge
|
||||||
|
|
||||||
**Note:** This only affects the `history` and `match_prev_cmd` suggestion strategies.
|
**Note:** This only affects the `history` and `match_prev_cmd` suggestion strategies.
|
||||||
|
|
||||||
|
### Skipping completion suggestions for certain cases
|
||||||
|
|
||||||
|
Set `ZSH_AUTOSUGGEST_COMPLETION_IGNORE` to a glob pattern to prevent offering completion suggestions when the buffer matches that pattern. For example, set it to `"git *"` to disable completion suggestions for git subcommands.
|
||||||
|
|
||||||
|
**Note:** This only affects the `completion` suggestion strategy.
|
||||||
|
|
||||||
|
|
||||||
### Key Bindings
|
### Key Bindings
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,9 @@ describe 'the `completion` suggestion strategy' do
|
||||||
session.
|
session.
|
||||||
run_command('autoload compinit && compinit').
|
run_command('autoload compinit && compinit').
|
||||||
run_command('_foo() { compadd bar; compadd bat }').
|
run_command('_foo() { compadd bar; compadd bat }').
|
||||||
run_command('compdef _foo baz')
|
run_command('_num() { compadd two; compadd three }').
|
||||||
|
run_command('compdef _foo baz').
|
||||||
|
run_command('compdef _num one')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -37,6 +39,21 @@ describe 'the `completion` suggestion strategy' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when ZSH_AUTOSUGGEST_COMPLETION_IGNORE is set to a pattern' do
|
||||||
|
let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=completion', 'ZSH_AUTOSUGGEST_COMPLETION_IGNORE="one *"'] }
|
||||||
|
|
||||||
|
it 'makes suggestions when the buffer does not match the pattern' do
|
||||||
|
session.send_string('baz ')
|
||||||
|
wait_for { session.content }.to eq('baz bar')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not make suggestions when the buffer matches the pattern' do
|
||||||
|
session.send_string('one t')
|
||||||
|
sleep 1
|
||||||
|
expect(session.content).to eq('one t')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when async mode is enabled' do
|
context 'when async mode is enabled' do
|
||||||
let(:options) { ['ZSH_AUTOSUGGEST_USE_ASYNC=true', 'ZSH_AUTOSUGGEST_STRATEGY=completion'] }
|
let(:options) { ['ZSH_AUTOSUGGEST_USE_ASYNC=true', 'ZSH_AUTOSUGGEST_STRATEGY=completion'] }
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,12 @@ _zsh_autosuggest_capture_completion_async() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_zsh_autosuggest_strategy_completion() {
|
_zsh_autosuggest_strategy_completion() {
|
||||||
|
# Reset options to defaults and enable LOCAL_OPTIONS
|
||||||
|
emulate -L zsh
|
||||||
|
|
||||||
|
# Enable extended glob for completion ignore pattern
|
||||||
|
setopt EXTENDED_GLOB
|
||||||
|
|
||||||
typeset -g suggestion
|
typeset -g suggestion
|
||||||
local line REPLY
|
local line REPLY
|
||||||
|
|
||||||
|
@ -105,6 +111,9 @@ _zsh_autosuggest_strategy_completion() {
|
||||||
# Exit if we don't have zpty
|
# Exit if we don't have zpty
|
||||||
zmodload zsh/zpty 2>/dev/null || return
|
zmodload zsh/zpty 2>/dev/null || return
|
||||||
|
|
||||||
|
# Exit if our search string matches the ignore pattern
|
||||||
|
[[ -n "$ZSH_AUTOSUGGEST_COMPLETION_IGNORE" ]] && [[ "$1" == $~ZSH_AUTOSUGGEST_COMPLETION_IGNORE ]] && return
|
||||||
|
|
||||||
# Zle will be inactive if we are in async mode
|
# Zle will be inactive if we are in async mode
|
||||||
if zle; then
|
if zle; then
|
||||||
zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync
|
zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync
|
||||||
|
|
|
@ -582,6 +582,12 @@ _zsh_autosuggest_capture_completion_async() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_zsh_autosuggest_strategy_completion() {
|
_zsh_autosuggest_strategy_completion() {
|
||||||
|
# Reset options to defaults and enable LOCAL_OPTIONS
|
||||||
|
emulate -L zsh
|
||||||
|
|
||||||
|
# Enable extended glob for completion ignore pattern
|
||||||
|
setopt EXTENDED_GLOB
|
||||||
|
|
||||||
typeset -g suggestion
|
typeset -g suggestion
|
||||||
local line REPLY
|
local line REPLY
|
||||||
|
|
||||||
|
@ -591,6 +597,9 @@ _zsh_autosuggest_strategy_completion() {
|
||||||
# Exit if we don't have zpty
|
# Exit if we don't have zpty
|
||||||
zmodload zsh/zpty 2>/dev/null || return
|
zmodload zsh/zpty 2>/dev/null || return
|
||||||
|
|
||||||
|
# Exit if our search string matches the ignore pattern
|
||||||
|
[[ -n "$ZSH_AUTOSUGGEST_COMPLETION_IGNORE" ]] && [[ "$1" == $~ZSH_AUTOSUGGEST_COMPLETION_IGNORE ]] && return
|
||||||
|
|
||||||
# Zle will be inactive if we are in async mode
|
# Zle will be inactive if we are in async mode
|
||||||
if zle; then
|
if zle; then
|
||||||
zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync
|
zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync
|
||||||
|
|
Loading…
Reference in a new issue