summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorJim Hester <james.f.hester@gmail.com>2012-11-02 11:06:32 -0400
committerJim Hester <james.f.hester@gmail.com>2012-11-02 11:06:32 -0400
commit4e513d72b9542b7b5079451e3380b4a98b0b7b56 (patch)
tree531b6156a75017745520ec28348060cfab98a18a /plugins
parentc2ae9e09ca1f33ff1e13e629a0b2e6bdd19f83a9 (diff)
downloadzsh-4e513d72b9542b7b5079451e3380b4a98b0b7b56.tar.gz
zsh-4e513d72b9542b7b5079451e3380b4a98b0b7b56.tar.bz2
zsh-4e513d72b9542b7b5079451e3380b4a98b0b7b56.zip
Fixes for vi-mode terminal overwriting bugs
fixes #387 and https://github.com/robbyrussell/oh-my-zsh/pull/1321#issuecomment-9959540 and other problems of prompt overwriting when people did not realize that it was vi mode causing the problem. Hat tip to sorin ionescu, as I took this code from prezto
Diffstat (limited to 'plugins')
-rw-r--r--plugins/vi-mode/vi-mode.plugin.zsh20
1 files changed, 19 insertions, 1 deletions
diff --git a/plugins/vi-mode/vi-mode.plugin.zsh b/plugins/vi-mode/vi-mode.plugin.zsh
index d29eb1dda..e23bd3c54 100644
--- a/plugins/vi-mode/vi-mode.plugin.zsh
+++ b/plugins/vi-mode/vi-mode.plugin.zsh
@@ -1,8 +1,26 @@
-function zle-line-init zle-keymap-select {
+# 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