mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2025-12-06 07:10:40 +01:00
Compare commits
6 Commits
features/h
...
experiment
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b27277e7ff | ||
|
|
146020d9b2 | ||
|
|
0636a39b51 | ||
|
|
6769c941ba | ||
|
|
371d6441c0 | ||
|
|
78e4379711 |
@@ -1,5 +1,8 @@
|
||||
# Changelog
|
||||
|
||||
## v0.6.3
|
||||
- Fixed bug moving cursor to end of buffer after accepting suggestion (#453)
|
||||
|
||||
## v0.6.2
|
||||
- Fixed bug deleting the last character in the buffer in vi mode (#450)
|
||||
- Degrade gracefully when user doesn't have `zsh/system` module installed (#447)
|
||||
|
||||
@@ -5,12 +5,13 @@ describe 'a zle widget' do
|
||||
context 'when added to ZSH_AUTOSUGGEST_ACCEPT_WIDGETS' do
|
||||
let(:options) { ["ZSH_AUTOSUGGEST_ACCEPT_WIDGETS+=(#{widget})"] }
|
||||
|
||||
it 'accepts the suggestion when invoked' do
|
||||
it 'accepts the suggestion and moves the cursor to the end of the buffer when invoked' do
|
||||
with_history('echo hello') do
|
||||
session.send_string('e')
|
||||
wait_for { session.content }.to eq('echo hello')
|
||||
session.send_keys('C-b')
|
||||
wait_for { session.content(esc_seqs: true) }.to eq('echo hello')
|
||||
wait_for { session.cursor }.to eq([10, 0])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,7 +17,10 @@ typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-
|
||||
# Will try each strategy in order until a suggestion is returned
|
||||
(( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && {
|
||||
typeset -ga ZSH_AUTOSUGGEST_STRATEGY
|
||||
ZSH_AUTOSUGGEST_STRATEGY=(history)
|
||||
ZSH_AUTOSUGGEST_STRATEGY=(
|
||||
'cd *:completion'
|
||||
'*:history,completion'
|
||||
)
|
||||
}
|
||||
|
||||
# Widgets that clear the suggestion
|
||||
|
||||
@@ -8,20 +8,45 @@
|
||||
|
||||
_zsh_autosuggest_fetch_suggestion() {
|
||||
typeset -g suggestion
|
||||
local -a strategies
|
||||
local strategy
|
||||
local -a strategy_specs spec_parts strategies
|
||||
local strategy_spec strategy prefix
|
||||
|
||||
# Ensure we are working with an array
|
||||
strategies=(${=ZSH_AUTOSUGGEST_STRATEGY})
|
||||
strategy_specs=(${ZSH_AUTOSUGGEST_STRATEGY})
|
||||
|
||||
for strategy in $strategies; do
|
||||
# Try to get a suggestion from this strategy
|
||||
_zsh_autosuggest_strategy_$strategy "$1"
|
||||
echo "fetching.." >> debug.log
|
||||
|
||||
# Ensure the suggestion matches the prefix
|
||||
[[ "$suggestion" != "$1"* ]] && unset suggestion
|
||||
for strategy_spec in $strategy_specs; do
|
||||
echo "trying spec: '$strategy_spec'" >> debug.log
|
||||
spec_parts=(${(s/:/)strategy_spec})
|
||||
prefix="${spec_parts[1]}"
|
||||
|
||||
# Break once we've found a valid suggestion
|
||||
[[ -n "$suggestion" ]] && break
|
||||
echo "checking prefix: $prefix" >> debug.log
|
||||
echo " spec parts: $spec_parts" >> debug.log
|
||||
|
||||
if [[ "$1" != ${~prefix} ]]; then
|
||||
echo " '$1' didn't match prefix: '$prefix'" >> debug.log
|
||||
continue;
|
||||
fi
|
||||
|
||||
strategies=(${(s/,/)${spec_parts[2]}})
|
||||
|
||||
echo " trying strategies: $strategies" >> debug.log
|
||||
|
||||
for strategy in $strategies; do
|
||||
|
||||
echo " trying strategy $strategy" >> debug.log
|
||||
|
||||
# Try to get a suggestion from this strategy
|
||||
_zsh_autosuggest_strategy_$strategy "$1"
|
||||
|
||||
# Ensure the suggestion matches the prefix
|
||||
[[ "$suggestion" != "$1"* ]] && unset suggestion
|
||||
|
||||
# Break once we've found a valid suggestion
|
||||
[[ -n "$suggestion" ]] && return
|
||||
|
||||
echo " didn't get suggestion" >> debug.log
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
@@ -136,7 +136,11 @@ _zsh_autosuggest_accept() {
|
||||
unset POSTDISPLAY
|
||||
|
||||
# Move the cursor to the end of the buffer
|
||||
CURSOR=${max_cursor_pos}
|
||||
if [[ "$KEYMAP" = "vicmd" ]]; then
|
||||
CURSOR=$(($#BUFFER - 1))
|
||||
else
|
||||
CURSOR=$#BUFFER
|
||||
fi
|
||||
fi
|
||||
|
||||
_zsh_autosuggest_invoke_original_widget $@
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Fish-like fast/unobtrusive autosuggestions for zsh.
|
||||
# https://github.com/zsh-users/zsh-autosuggestions
|
||||
# v0.6.2
|
||||
# v0.6.3
|
||||
# Copyright (c) 2013 Thiago de Arruda
|
||||
# Copyright (c) 2016-2019 Eric Freese
|
||||
#
|
||||
@@ -43,7 +43,10 @@ typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-
|
||||
# Will try each strategy in order until a suggestion is returned
|
||||
(( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && {
|
||||
typeset -ga ZSH_AUTOSUGGEST_STRATEGY
|
||||
ZSH_AUTOSUGGEST_STRATEGY=(history)
|
||||
ZSH_AUTOSUGGEST_STRATEGY=(
|
||||
'cd *:completion'
|
||||
'*:history,completion'
|
||||
)
|
||||
}
|
||||
|
||||
# Widgets that clear the suggestion
|
||||
@@ -398,7 +401,11 @@ _zsh_autosuggest_accept() {
|
||||
unset POSTDISPLAY
|
||||
|
||||
# Move the cursor to the end of the buffer
|
||||
CURSOR=${max_cursor_pos}
|
||||
if [[ "$KEYMAP" = "vicmd" ]]; then
|
||||
CURSOR=$(($#BUFFER - 1))
|
||||
else
|
||||
CURSOR=$#BUFFER
|
||||
fi
|
||||
fi
|
||||
|
||||
_zsh_autosuggest_invoke_original_widget $@
|
||||
@@ -704,21 +711,46 @@ _zsh_autosuggest_strategy_match_prev_cmd() {
|
||||
|
||||
_zsh_autosuggest_fetch_suggestion() {
|
||||
typeset -g suggestion
|
||||
local -a strategies
|
||||
local strategy
|
||||
local -a strategy_specs spec_parts strategies
|
||||
local strategy_spec strategy prefix
|
||||
|
||||
# Ensure we are working with an array
|
||||
strategies=(${=ZSH_AUTOSUGGEST_STRATEGY})
|
||||
strategy_specs=(${ZSH_AUTOSUGGEST_STRATEGY})
|
||||
|
||||
for strategy in $strategies; do
|
||||
# Try to get a suggestion from this strategy
|
||||
_zsh_autosuggest_strategy_$strategy "$1"
|
||||
echo "fetching.." >> debug.log
|
||||
|
||||
# Ensure the suggestion matches the prefix
|
||||
[[ "$suggestion" != "$1"* ]] && unset suggestion
|
||||
for strategy_spec in $strategy_specs; do
|
||||
echo "trying spec: '$strategy_spec'" >> debug.log
|
||||
spec_parts=(${(s/:/)strategy_spec})
|
||||
prefix="${spec_parts[1]}"
|
||||
|
||||
# Break once we've found a valid suggestion
|
||||
[[ -n "$suggestion" ]] && break
|
||||
echo "checking prefix: $prefix" >> debug.log
|
||||
echo " spec parts: $spec_parts" >> debug.log
|
||||
|
||||
if [[ "$1" != ${~prefix} ]]; then
|
||||
echo " '$1' didn't match prefix: '$prefix'" >> debug.log
|
||||
continue;
|
||||
fi
|
||||
|
||||
strategies=(${(s/,/)${spec_parts[2]}})
|
||||
|
||||
echo " trying strategies: $strategies" >> debug.log
|
||||
|
||||
for strategy in $strategies; do
|
||||
|
||||
echo " trying strategy $strategy" >> debug.log
|
||||
|
||||
# Try to get a suggestion from this strategy
|
||||
_zsh_autosuggest_strategy_$strategy "$1"
|
||||
|
||||
# Ensure the suggestion matches the prefix
|
||||
[[ "$suggestion" != "$1"* ]] && unset suggestion
|
||||
|
||||
# Break once we've found a valid suggestion
|
||||
[[ -n "$suggestion" ]] && return
|
||||
|
||||
echo " didn't get suggestion" >> debug.log
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user