]> Sergey Matveev's repositories - dotfiles.git/commitdiff
Do not overwrite PS1 every time
authorSergey Matveev <stargrave@stargrave.org>
Sun, 13 Feb 2022 13:25:05 +0000 (16:25 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 13 Feb 2022 17:37:22 +0000 (20:37 +0300)
zsh/.zsh/rc/015prompt.zsh

index b460fc546dee812785883dffbb98f7ef3affca38..c8a34c139e52e620d28532fe91eee270fd7c8360 100644 (file)
@@ -1,17 +1,24 @@
+setopt PROMPT_SUBST
+
+PS1="%2~ %B"
+PS1+='${(j::)psvar}'
+PS1+="%(1j.%j.)%b"
+PS1+='%U${vcs_info_msg_0_[1,-32]}%u'
+PS1+="%(?..%S%?%s)"
+PS1+='%(1S.%B${SECONDS}%b.)'
+PS1+='%B%F{magenta}${_VIMODE}%f%b '
+
 function zle-line-init zle-keymap-select {
-    prompt="%2~ %B"
-    [[ "$#_autoenv_stack_entered" -gt 0 ]] && prompt+="A"
-    [[ -n "$VIRTUAL_ENV" ]] && prompt+="V"
-    prompt+="%(1j.%j.)%b"
-    prompt+="%U${vcs_info_msg_0_[1,-32]}%u"
-    prompt+="%(?..%S%?%s)"
-    prompt+="%(1S.%U${SECONDS}%u.)"
-    local state="%#"
-    [[ ${KEYMAP} == vicmd ]] && state="+"
-    prompt+="%B%F{magenta}${state}%f%b "
-    PS1=$prompt
+    [[ ${KEYMAP} == vicmd ]] && _VIMODE="+" || _VIMODE="%#"
+    [[ "$#_autoenv_stack_entered" -eq 0 ]] && psvar=(${psvar#A}) || {
+        [[ -n "${psvar[(r)A]}" ]] || psvar=(A $psvar)
+    }
+    [[ -z "$VIRTUAL_ENV" ]] && psvar=(${psvar#V}) || {
+        [[ -n "${psvar[(r)V]}" ]] || psvar=(V $psvar)
+    }
     zle reset-prompt
 }
+
 zle -N zle-line-init
 zle -N zle-keymap-select