]> src.twobees.de Git - dotfiles.git/blob - stow/oh-my-zsh/.oh-my-zsh/plugins/git-prompt/git-prompt.plugin.zsh
...
[dotfiles.git] / stow / oh-my-zsh / .oh-my-zsh / plugins / git-prompt / git-prompt.plugin.zsh
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}"
5
6 __GIT_PROMPT_DIR="${0:A:h}"
7
8 ## Hook function definitions
9 function chpwd_update_git_vars() {
10     update_current_git_vars
11 }
12
13 function preexec_update_git_vars() {
14     case "$2" in
15         git*|hub*|gh*|stg*)
16         __EXECUTED_GIT_COMMAND=1
17         ;;
18     esac
19 }
20
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
25     fi
26 }
27
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
32
33
34 ## Function definitions
35 function update_current_git_vars() {
36     unset __CURRENT_GIT_STATUS
37
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]
50 }
51
52 git_super_status() {
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}%}"
58       fi
59       if [ "$GIT_AHEAD" -ne "0" ]; then
60           STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_AHEAD$GIT_AHEAD%{${reset_color}%}"
61       fi
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}%}"
65       fi
66       if [ "$GIT_CONFLICTS" -ne "0" ]; then
67           STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CONFLICTS$GIT_CONFLICTS%{${reset_color}%}"
68       fi
69       if [ "$GIT_CHANGED" -ne "0" ]; then
70           STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CHANGED$GIT_CHANGED%{${reset_color}%}"
71       fi
72       if [ "$GIT_UNTRACKED" -ne "0" ]; then
73           STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNTRACKED$GIT_UNTRACKED%{${reset_color}%}"
74       fi
75       if [ "$GIT_STASHED" -ne "0" ]; then
76           STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_STASHED$GIT_STASHED%{${reset_color}%}"
77       fi
78       if [ "$GIT_CLEAN" -eq "1" ]; then
79           STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CLEAN"
80       fi
81       STATUS="$STATUS%{${reset_color}%}$ZSH_THEME_GIT_PROMPT_SUFFIX"
82       echo "$STATUS"
83     fi
84 }
85
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%}"
99
100 # Set the prompt.
101 RPROMPT='$(git_super_status)'