mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-01-09 02:24:03 +01:00
The support for special keys right now is simply with hardcoded values, this commit changes that to using terminfo information for the keys to set the binds. Should be much more general, and just work, at least most of the time. This also fixes a bug in the vi-mode plugin where the special keys were not bound because setting vi mode removes binds set in emacs mode.
38 lines
990 B
Bash
38 lines
990 B
Bash
# Ensures that $terminfo values are valid and updates editor information when
|
|
# the keymap changes.
|
|
function zle-keymap-select zle-line-init zle-line-finish {
|
|
# The terminal must be in application mode when ZLE is active for $terminfo
|
|
# values to be valid.
|
|
if (( ${+terminfo[smkx]} )); then
|
|
printf '%s' ${terminfo[smkx]}
|
|
fi
|
|
if (( ${+terminfo[rmkx]} )); then
|
|
printf '%s' ${terminfo[rmkx]}
|
|
fi
|
|
|
|
zle reset-prompt
|
|
zle -R
|
|
}
|
|
|
|
zle -N zle-line-init
|
|
zle -N zle-line-finish
|
|
zle -N zle-keymap-select
|
|
|
|
bindkey -v
|
|
|
|
#rebind special key keybinds
|
|
source $ZSH/lib/special-keys.zsh
|
|
|
|
# if mode indicator wasn't setup by theme, define default
|
|
if [[ "$MODE_INDICATOR" == "" ]]; then
|
|
MODE_INDICATOR="%{$fg_bold[red]%}<%{$fg[red]%}<<%{$reset_color%}"
|
|
fi
|
|
|
|
function vi_mode_prompt_info() {
|
|
echo "${${KEYMAP/vicmd/$MODE_INDICATOR}/(main|viins)/}"
|
|
}
|
|
|
|
# define right prompt, if it wasn't defined by a theme
|
|
if [[ "$RPS1" == "" && "$RPROMPT" == "" ]]; then
|
|
RPS1='$(vi_mode_prompt_info)'
|
|
fi
|