mirror of
https://github.com/frebib/dotfiles.git
synced 2024-06-14 12:57:23 +00:00
Joe Groocock
895d0ff0aa
Change the cursor to an `_` too, to make it abundantly clear that the mode has changed. Hopefully this stops me screwing up and accidentally entering vim mode without realising. Signed-off-by: Joe Groocock <me@frebib.net>
75 lines
2.9 KiB
Bash
75 lines
2.9 KiB
Bash
# ZSH RPROMPT containing simple Git status
|
|
|
|
git_prompt_info() {
|
|
ref=$(git symbolic-ref HEAD 2> /dev/null) || return
|
|
echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_SUFFIX"
|
|
}
|
|
git_prompt_status() {
|
|
# Get the status of the working tree
|
|
INDEX=$(command git status --porcelain -b 2> /dev/null)
|
|
RESET='%f'
|
|
STATUS=""
|
|
if $(echo "$INDEX" | grep -E '^\?\? ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$RESET$STATUS"
|
|
fi
|
|
if $(echo "$INDEX" | grep '^A ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$RESET$STATUS"
|
|
elif $(echo "$INDEX" | grep '^M ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$RESET$STATUS"
|
|
fi
|
|
if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$RESET$STATUS"
|
|
elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$RESET$STATUS"
|
|
elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$RESET$STATUS"
|
|
fi
|
|
if $(echo "$INDEX" | grep '^R ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$RESET$STATUS"
|
|
fi
|
|
if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$RESET$STATUS"
|
|
elif $(echo "$INDEX" | grep '^D ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$RESET$STATUS"
|
|
elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$RESET$STATUS"
|
|
fi
|
|
if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_STASHED$RESET$STATUS"
|
|
fi
|
|
if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$RESET$STATUS"
|
|
fi
|
|
if $(echo "$INDEX" | grep '^## .*ahead' &> /dev/null); then
|
|
AHEAD=$(echo "$INDEX" | sed -nE 's/.*ahead\s([0-9]*).*/\1/p')
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_AHEAD$AHEAD$RESET$STATUS"
|
|
fi
|
|
if $(echo "$INDEX" | grep '^## .*behind' &> /dev/null); then
|
|
BEHIND=$(echo "$INDEX" | sed -nE 's/.*behind\s([0-9]*).*/\1/p')
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_BEHIND$BEHIND$RESET$STATUS"
|
|
fi
|
|
if $(echo "$INDEX" | grep '^## .*diverged' &> /dev/null); then
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_DIVERGED$RESET$STATUS"
|
|
fi
|
|
echo $STATUS
|
|
}
|
|
|
|
# Required for dynamic prompt
|
|
setopt prompt_subst
|
|
|
|
ZSH_THEME_GIT_PROMPT_PREFIX=""
|
|
ZSH_THEME_GIT_PROMPT_SUFFIX=""
|
|
ZSH_THEME_GIT_PROMPT_DIRTY=""
|
|
ZSH_THEME_GIT_PROMPT_CLEAN=""
|
|
ZSH_THEME_GIT_PROMPT_AHEAD="%F{green}↑"
|
|
ZSH_THEME_GIT_PROMPT_BEHIND="%F{red}↓"
|
|
|
|
ZSH_THEME_GIT_PROMPT_ADDED="%F{green}+"
|
|
ZSH_THEME_GIT_PROMPT_MODIFIED="%F{blue}~"
|
|
ZSH_THEME_GIT_PROMPT_DELETED="%F{red}-"
|
|
ZSH_THEME_GIT_PROMPT_RENAMED="%F{magenta}>"
|
|
ZSH_THEME_GIT_PROMPT_UNMERGED="%F{yellow}#"
|
|
ZSH_THEME_GIT_PROMPT_UNTRACKED="%F{cyan}?"
|
|
|
|
RPROMPT="\$(git_prompt_info)\$(git_prompt_status)%{\$reset_color%}$RPROMPT"
|