3f34ce4da401a18dc36c95f0c41280b544b02b6a

Author
CrispyConductor <crispy@cluenet.org>
Committer
GitHub <noreply@github.com>
Date

Message

fix(vi-mode): fix keymap indicator on zle-line-finish (#9620)

* Update VI_KEYMAP on zle-line-finish.  Fixes next prompt draw.

* Also fix vi-mode prompt redraw in case previous prompt was canceled

* Do not redraw fix prompt if VI_MODE_RESET_PROMPT_ON_MODE_CHANGE is unset

* Use a local variable instead of global in function

Diff

 1diff --git a/plugins/vi-mode/vi-mode.plugin.zsh b/plugins/vi-mode/vi-mode.plugin.zsh
 2index 7f14961ad18115c356f15c1027b67437d76afd31..dd4afdd8b4f90f4a39c5bb4a2ca04fa63f6b794c 100644
 3--- a/plugins/vi-mode/vi-mode.plugin.zsh
 4+++ b/plugins/vi-mode/vi-mode.plugin.zsh
 5@@ -50,13 +50,17 @@ zle -N zle-keymap-select
 6 # These "echoti" statements were originally set in lib/key-bindings.zsh
 7 # Not sure the best way to extend without overriding.
 8 function zle-line-init() {
 9+  local prev_vi_keymap
10+  prev_vi_keymap="${VI_KEYMAP:-}"
11   typeset -g VI_KEYMAP=main
12+  [[ "$prev_vi_keymap" != 'main' ]] && [[ "${VI_MODE_RESET_PROMPT_ON_MODE_CHANGE:-}" = true ]] && zle reset-prompt
13   (( ! ${+terminfo[smkx]} )) || echoti smkx
14   _vi-mode-set-cursor-shape-for-keymap "${VI_KEYMAP}"
15 }
16 zle -N zle-line-init
17 
18 function zle-line-finish() {
19+  typeset -g VI_KEYMAP=main
20   (( ! ${+terminfo[rmkx]} )) || echoti rmkx
21   _vi-mode-set-cursor-shape-for-keymap default
22 }