zsh-autosuggestions/src/start.zsh

49 lines
1.8 KiB
Bash

#--------------------------------------------------------------------#
# Start #
#--------------------------------------------------------------------#
# Start the autosuggestion widgets
_zsh_autosuggest_start() {
# By default we re-bind widgets on every precmd to ensure we wrap other
# wrappers. Specifically, highlighting breaks if our widgets are wrapped by
# zsh-syntax-highlighting widgets. This also allows modifications to the
# widget list variables to take effect on the next precmd. However this has
# a decent performance hit, so users can set ZSH_AUTOSUGGEST_MANUAL_REBIND
# to disable the automatic re-binding.
if (( ${+ZSH_AUTOSUGGEST_MANUAL_REBIND} )); then
add-zsh-hook -d precmd _zsh_autosuggest_start
fi
_zsh_autosuggest_bind_widgets
}
# Mark for auto-loading the functions that we use
autoload -Uz add-zsh-hook is-at-least
# Automatically enable asynchronous mode in newer versions of zsh. Disable for
# older versions because there is a bug when using async mode where ^C does not
# work immediately after fetching a suggestion.
# See https://github.com/zsh-users/zsh-autosuggestions/issues/364
if is-at-least 5.0.8; then
typeset -g ZSH_AUTOSUGGEST_USE_ASYNC=
fi
# Start the autosuggestion widgets on the next precmd
add-zsh-hook precmd _zsh_autosuggest_start
_zsh_autosuggest_line_init() {
emulate -L zsh
local min_input="${ZSH_AUTOSUGGEST_AI_MIN_INPUT:-1}"
if (( min_input == 0 )) && \
(( ! ${+_ZSH_AUTOSUGGEST_DISABLED} )); then
_zsh_autosuggest_fetch
fi
}
# Use add-zle-hook-widget (zsh 5.3+) to avoid conflicts with other plugins
if (( ${+functions[add-zle-hook-widget]} )) || \
autoload -Uz add-zle-hook-widget 2>/dev/null; then
add-zle-hook-widget zle-line-init _zsh_autosuggest_line_init
fi