From 6c1001c4dcbe7393fdead33d1c33f0fecf0da88d Mon Sep 17 00:00:00 2001 From: Stefan Weigl-Bosker Date: Thu, 6 Mar 2025 13:13:13 -0500 Subject: zsh stuff --- modules/zsh/themes/stefan.zsh-theme | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'modules/zsh/themes') 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 () 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%}" -- cgit v1.2.3