浏览代码

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
CrispyConductor 3 年之前
父节点
当前提交
3f34ce4da4
共有 1 个文件被更改,包括 4 次插入0 次删除
  1. 4 0
      plugins/vi-mode/vi-mode.plugin.zsh

+ 4 - 0
plugins/vi-mode/vi-mode.plugin.zsh

@@ -50,13 +50,17 @@ zle -N zle-keymap-select
 # These "echoti" statements were originally set in lib/key-bindings.zsh
 # Not sure the best way to extend without overriding.
 function zle-line-init() {
+  local prev_vi_keymap
+  prev_vi_keymap="${VI_KEYMAP:-}"
   typeset -g VI_KEYMAP=main
+  [[ "$prev_vi_keymap" != 'main' ]] && [[ "${VI_MODE_RESET_PROMPT_ON_MODE_CHANGE:-}" = true ]] && zle reset-prompt
   (( ! ${+terminfo[smkx]} )) || echoti smkx
   _vi-mode-set-cursor-shape-for-keymap "${VI_KEYMAP}"
 }
 zle -N zle-line-init
 
 function zle-line-finish() {
+  typeset -g VI_KEYMAP=main
   (( ! ${+terminfo[rmkx]} )) || echoti rmkx
   _vi-mode-set-cursor-shape-for-keymap default
 }