Adding support for ZSH_AUTOSUGGEST_BUFFER_MIN_SIZE to disable suggestions on small buffers

This commit is contained in:
muhammadsohail 2023-05-20 16:51:23 -04:00 committed by Muhammad Sohail
parent 11d17e7fea
commit d6334ded0b
5 changed files with 47 additions and 13 deletions

View file

@ -74,10 +74,10 @@ Widgets that modify the buffer and are not found in any of these arrays will fet
**Note:** A widget shouldn't belong to more than one of the above arrays. **Note:** A widget shouldn't belong to more than one of the above arrays.
### Disabling suggestion for large buffers ### Disabling suggestion for small or large buffers
Set `ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE` to an integer value to disable autosuggestion for large buffers. The default is unset, which means that autosuggestion will be tried for any buffer size. Recommended value is 20. Set `ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE` or `ZSH_AUTOSUGGEST_BUFFER_MIN_SIZE` to an integer value to disable autosuggestion for small or larger buffers. The default for both is unset, which means that autosuggestion will be tried for any buffer size. Recommended range is [5, 20].
This can be useful when pasting large amount of text in the terminal, to avoid triggering autosuggestion for strings that are too long. This can be useful when pasting large amount of text in the terminal, to avoid triggering autosuggestion for strings that are too long, or for irrelevant suggestions on smaller buffers.
### Asynchronous Mode ### Asynchronous Mode

View file

@ -25,6 +25,9 @@ describe 'a suggestion' do
wait_for { session.content }.to eq(long_command) wait_for { session.content }.to eq(long_command)
end end
it 'is not provided when the buffer is longer than the specified length' it 'is not provided when the buffer is longer than the specified length' do
session.send_string(long_command[0...(buffer_max_size + 1)])
wait_for { session.content }.to eq(long_command[0...(buffer_max_size + 1)])
end
end end
end end

View file

@ -0,0 +1,33 @@
describe 'a suggestion' do
let(:term_opts) { { width: 200 } }
let(:command) { "echo foobar" }
around do |example|
with_history(command) { example.run }
end
it 'is provided for any buffer length' do
session.send_string(command[0...-1])
wait_for { session.content }.to eq(command)
end
context 'when ZSH_AUTOSUGGEST_BUFFER_MIN_SIZE is specified' do
let(:buffer_min_size) { 5 }
let(:options) { ["ZSH_AUTOSUGGEST_BUFFER_MIN_SIZE=#{buffer_min_size}"] }
it 'is provided when the buffer is longer than the specified length' do
session.send_string(command[0...(buffer_min_size + 1)])
wait_for { session.content }.to eq(command)
end
it 'is provided when the buffer is equal to the specified length' do
session.send_string(command[0...(buffer_min_size)])
wait_for { session.content }.to eq(command)
end
it 'is not provided when the buffer is shorter than the specified length' do
session.send_string(command[0...(buffer_min_size - 1)])
wait_for { session.content }.to eq(command[0...(buffer_min_size - 1)])
end
end
end

View file

@ -73,11 +73,10 @@ _zsh_autosuggest_modify() {
fi fi
# Get a new suggestion if the buffer is not empty after modification # Get a new suggestion if the buffer is not empty after modification
if (( $#BUFFER > 0 )); then if ([[ -z "$ZSH_AUTOSUGGEST_BUFFER_MIN_SIZE" ]] || (( $#BUFFER >= $ZSH_AUTOSUGGEST_BUFFER_MIN_SIZE ))) && \
if [[ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]] || (( $#BUFFER <= $ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE )); then ([[ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]] || (( $#BUFFER <= $ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE ))); then
_zsh_autosuggest_fetch _zsh_autosuggest_fetch
fi fi
fi
return $retval return $retval
} }

View file

@ -337,11 +337,10 @@ _zsh_autosuggest_modify() {
fi fi
# Get a new suggestion if the buffer is not empty after modification # Get a new suggestion if the buffer is not empty after modification
if (( $#BUFFER > 0 )); then if ([[ -z "$ZSH_AUTOSUGGEST_BUFFER_MIN_SIZE" ]] || (( $#BUFFER >= $ZSH_AUTOSUGGEST_BUFFER_MIN_SIZE ))) && \
if [[ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]] || (( $#BUFFER <= $ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE )); then ([[ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]] || (( $#BUFFER <= $ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE ))); then
_zsh_autosuggest_fetch _zsh_autosuggest_fetch
fi fi
fi
return $retval return $retval
} }