zsh-autosuggestions/lib/widget/hook.zsh

54 lines
1.3 KiB
Bash
Raw Normal View History

2016-01-27 11:51:44 +08:00
_zsh_autosuggest_is_defined_widget() {
[ -n "$widgets[$1]" ]
}
_zsh_autosuggest_is_built_in_widget() {
[ -n "$widgets[.$1]" ]
}
_zsh_autosuggest_is_original_widget_defined() {
_zsh_autosuggest_is_defined_widget $(_zsh_autosuggest_original_widget $1)
}
_zsh_autosuggest_original_widget() {
if _zsh_autosuggest_is_built_in_widget $1; then
echo ".$1"
else
echo "_autosuggest_original_$1"
fi
}
_zsh_autosuggest_hook_widget() {
local autosuggest_widget=$1
local widget=$2
# Skip if the widget does not exist
if ! _zsh_autosuggest_is_defined_widget $widget; then
continue
fi
# Alias if dot-prefixed alias is unavailable and we haven't already aliased it
if ! _zsh_autosuggest_is_original_widget_defined $widget; then
zle -A $widget $(_zsh_autosuggest_original_widget $widget)
fi
# Hook it
zle -A $autosuggest_widget $widget
}
_zsh_autosuggest_hook_widgets() {
local widget
for widget in $ZSH_AUTOSUGGEST_MODIFY_WIDGETS; do
_zsh_autosuggest_hook_widget _zsh_autosuggest_widget_modify $widget
done
for widget in $ZSH_AUTOSUGGEST_CLEAR_WIDGETS; do
_zsh_autosuggest_hook_widget _zsh_autosuggest_widget_clear $widget
done
for widget in $ZSH_AUTOSUGGEST_ACCEPT_WIDGETS; do
_zsh_autosuggest_hook_widget _zsh_autosuggest_widget_accept $widget
done
}