You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.2 KiB
45 lines
1.2 KiB
# 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] && $+terminfo[rmkx] )); then |
|
case "$0" in |
|
(zle-line-init) |
|
# Enable terminal application mode. |
|
echoti smkx |
|
;; |
|
(zle-line-finish) |
|
# Disable terminal application mode. |
|
echoti rmkx |
|
;; |
|
esac |
|
fi |
|
zle reset-prompt |
|
zle -R |
|
} |
|
|
|
zle -N zle-line-init |
|
zle -N zle-line-finish |
|
zle -N zle-keymap-select |
|
|
|
#changing mode clobbers the keybinds, so store the keybinds before and execute |
|
#them after |
|
binds=`bindkey -L` |
|
bindkey -v |
|
for bind in ${(@f)binds}; do eval $bind; done |
|
unset binds |
|
|
|
# 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
|
|
|