1 # Handle $0 according to the standard:
2 # https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
3 0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
4 0="${${(M)0:#/*}:-$PWD/$0}"
6 __GIT_PROMPT_DIR="${0:A:h}"
8 ## Hook function definitions
9 function chpwd_update_git_vars() {
10 update_current_git_vars
13 function preexec_update_git_vars() {
16 __EXECUTED_GIT_COMMAND=1
21 function precmd_update_git_vars() {
22 if [ -n "$__EXECUTED_GIT_COMMAND" ] || [ ! -n "$ZSH_THEME_GIT_PROMPT_CACHE" ]; then
23 update_current_git_vars
24 unset __EXECUTED_GIT_COMMAND
28 autoload -U add-zsh-hook
29 add-zsh-hook chpwd chpwd_update_git_vars
30 add-zsh-hook precmd precmd_update_git_vars
31 add-zsh-hook preexec preexec_update_git_vars
34 ## Function definitions
35 function update_current_git_vars() {
36 unset __CURRENT_GIT_STATUS
38 local gitstatus="$__GIT_PROMPT_DIR/gitstatus.py"
39 _GIT_STATUS=$(python3 ${gitstatus} 2>/dev/null)
40 __CURRENT_GIT_STATUS=("${(@s: :)_GIT_STATUS}")
41 GIT_BRANCH=$__CURRENT_GIT_STATUS[1]
42 GIT_AHEAD=$__CURRENT_GIT_STATUS[2]
43 GIT_BEHIND=$__CURRENT_GIT_STATUS[3]
44 GIT_STAGED=$__CURRENT_GIT_STATUS[4]
45 GIT_CONFLICTS=$__CURRENT_GIT_STATUS[5]
46 GIT_CHANGED=$__CURRENT_GIT_STATUS[6]
47 GIT_UNTRACKED=$__CURRENT_GIT_STATUS[7]
48 GIT_STASHED=$__CURRENT_GIT_STATUS[8]
49 GIT_CLEAN=$__CURRENT_GIT_STATUS[9]
53 precmd_update_git_vars
54 if [ -n "$__CURRENT_GIT_STATUS" ]; then
55 STATUS="$ZSH_THEME_GIT_PROMPT_PREFIX$ZSH_THEME_GIT_PROMPT_BRANCH$GIT_BRANCH%{${reset_color}%}"
56 if [ "$GIT_BEHIND" -ne "0" ]; then
57 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_BEHIND$GIT_BEHIND%{${reset_color}%}"
59 if [ "$GIT_AHEAD" -ne "0" ]; then
60 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_AHEAD$GIT_AHEAD%{${reset_color}%}"
62 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_SEPARATOR"
63 if [ "$GIT_STAGED" -ne "0" ]; then
64 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_STAGED$GIT_STAGED%{${reset_color}%}"
66 if [ "$GIT_CONFLICTS" -ne "0" ]; then
67 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CONFLICTS$GIT_CONFLICTS%{${reset_color}%}"
69 if [ "$GIT_CHANGED" -ne "0" ]; then
70 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CHANGED$GIT_CHANGED%{${reset_color}%}"
72 if [ "$GIT_UNTRACKED" -ne "0" ]; then
73 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNTRACKED$GIT_UNTRACKED%{${reset_color}%}"
75 if [ "$GIT_STASHED" -ne "0" ]; then
76 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_STASHED$GIT_STASHED%{${reset_color}%}"
78 if [ "$GIT_CLEAN" -eq "1" ]; then
79 STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CLEAN"
81 STATUS="$STATUS%{${reset_color}%}$ZSH_THEME_GIT_PROMPT_SUFFIX"
86 # Default values for the appearance of the prompt.
87 ZSH_THEME_GIT_PROMPT_PREFIX="("
88 ZSH_THEME_GIT_PROMPT_SUFFIX=")"
89 ZSH_THEME_GIT_PROMPT_SEPARATOR="|"
90 ZSH_THEME_GIT_PROMPT_BRANCH="%{$fg_bold[magenta]%}"
91 ZSH_THEME_GIT_PROMPT_STAGED="%{$fg[red]%}%{●%G%}"
92 ZSH_THEME_GIT_PROMPT_CONFLICTS="%{$fg[red]%}%{✖%G%}"
93 ZSH_THEME_GIT_PROMPT_CHANGED="%{$fg[blue]%}%{✚%G%}"
94 ZSH_THEME_GIT_PROMPT_BEHIND="%{↓%G%}"
95 ZSH_THEME_GIT_PROMPT_AHEAD="%{↑%G%}"
96 ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%}%{…%G%}"
97 ZSH_THEME_GIT_PROMPT_STASHED="%{$fg_bold[blue]%}%{⚑%G%}"
98 ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}%{✔%G%}"
101 RPROMPT='$(git_super_status)'