Add an autosuggest widget: autosuggest-execute.

This commit is contained in:
Kordan Ou 2016-02-20 21:52:21 +08:00
commit 606c81a01b
5 changed files with 42 additions and 4 deletions

View file

@ -56,6 +56,10 @@ ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(
vi-end-of-line
)
# Widgets that accept the entire suggestion and execute it
ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=(
)
# Widgets that accept the suggestion as far as the cursor moves
ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=(
forward-word
@ -157,6 +161,8 @@ _zsh_autosuggest_bind_widgets() {
_zsh_autosuggest_bind_widget $widget clear
elif [ ${ZSH_AUTOSUGGEST_ACCEPT_WIDGETS[(r)$widget]} ]; then
_zsh_autosuggest_bind_widget $widget accept
elif [ ${ZSH_AUTOSUGGEST_EXECUTE_WIDGETS[(r)$widget]} ]; then
_zsh_autosuggest_bind_widget $widget execute
elif [ ${ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS[(r)$widget]} ]; then
_zsh_autosuggest_bind_widget $widget partial_accept
else
@ -250,6 +256,17 @@ _zsh_autosuggest_accept() {
_zsh_autosuggest_invoke_original_widget $@
}
# Accept the entire suggestion and execute it
_zsh_autosuggest_execute() {
# Add the suggestion to the buffer
BUFFER="$BUFFER$POSTDISPLAY"
# Remove the suggestion
unset POSTDISPLAY
zle .accept-line
}
# Partially accept the suggestion
_zsh_autosuggest_partial_accept() {
# Save the contents of the buffer so we can restore later if needed
@ -274,7 +291,7 @@ _zsh_autosuggest_partial_accept() {
fi
}
for action in clear modify accept partial_accept; do
for action in clear modify accept partial_accept execute; do
eval "_zsh_autosuggest_widget_$action() {
_zsh_autosuggest_highlight_reset
_zsh_autosuggest_$action \$@
@ -284,6 +301,7 @@ done
zle -N autosuggest-accept _zsh_autosuggest_widget_accept
zle -N autosuggest-clear _zsh_autosuggest_widget_clear
zle -N autosuggest-execute _zsh_autosuggest_widget_execute
#--------------------------------------------------------------------#
# Suggestion #