aboutsummaryrefslogtreecommitdiff
path: root/modules/zsh/themes/stefan.zsh-theme
diff options
context:
space:
mode:
Diffstat (limited to 'modules/zsh/themes/stefan.zsh-theme')
-rw-r--r--modules/zsh/themes/stefan.zsh-theme24
1 files changed, 22 insertions, 2 deletions
diff --git a/modules/zsh/themes/stefan.zsh-theme b/modules/zsh/themes/stefan.zsh-theme
index 788f49b..dc9a201 100644
--- a/modules/zsh/themes/stefan.zsh-theme
+++ b/modules/zsh/themes/stefan.zsh-theme
@@ -55,6 +55,26 @@ function gitstatus_prompt_update() {
GITSTATUS_PROMPT="%f${p}%f"
}
+INS_MODE='%{%F{reset}%}[%{%F{green}%}i%{%F{reset}%}]'
+NORMAL_MODE='%{%F{reset}%}[%{%F{yellow}%}n%{%F{reset}%}]'
+VI_MODE=$INS_MODE
+
+function zle-keymap-select() {
+ VI_MODE="${${KEYMAP/vicmd/${NORMAL_MODE}}/(main|viins)/${INS_MODE}}"
+ zle reset-prompt
+# zle -R
+}
+
+zle -N zle-keymap-select # hook readline so we can determine mode
+
+# normally, SIGINT (<C-c>) will put you in ins, but indictator wont update.
+# fix: hook TRAPINT, update mode and repropagate the SIGINT
+# im too lazy to figure out if its possible to keep normal mode and send a sigint
+TRAPINT() {
+ export VI_MODE=$INS_MODE
+ return $((128+$1))
+}
+
source "$(gitstatus-share)/gitstatus.plugin.zsh" || return
gitstatus_stop 'MY' && gitstatus_start -s -1 -u -1 -c -1 -d -1 'MY'
@@ -66,7 +86,7 @@ setopt prompt_subst prompt_percent no_prompt_bang
NEWLINE=$'\n'
GIT_PROMPT_INFO=${GITSTATUS_PROMPT:+ $GITSTATUS_PROMPT}
-PROMPT="%F{magenta}%~% %f% %F{yellow}% ${NEWLINE}λ %b%f%"
-RPROMPT='$(virtualenv_info)% ${GITSTATUS_PROMPT:+ $GITSTATUS_PROMPT}'
+PROMPT='%F{magenta}%~% %f% ${VI_MODE}${NEWLINE}%{%F{yellow}%}λ %b%f% '
+RPROMPT='$(virtualenv_info)% ${GITSTATUS_PROMPT:+ $GITSTATUS_PROMPT} '
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[green]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"