Skip to content

Instantly share code, notes, and snippets.

@pcreux
Forked from scelis/chpwd_update_git_vars.sh
Created November 30, 2009 18:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pcreux/245605 to your computer and use it in GitHub Desktop.
Save pcreux/245605 to your computer and use it in GitHub Desktop.
Zsh prompt with git status
update_current_git_vars
if [ -n "$__EXECUTED_GIT_COMMAND" ]; then
update_current_git_vars
unset __EXECUTED_GIT_COMMAND
fi
case "$1" in
git*)
__EXECUTED_GIT_COMMAND=1
;;
esac
if [ -n "$__CURRENT_GIT_BRANCH" ]; then
local s="("
s+="$__CURRENT_GIT_BRANCH"
case "$__CURRENT_GIT_BRANCH_STATUS" in
ahead)
s+="↑"
;;
diverged)
s+="↕"
;;
behind)
s+="↓"
;;
esac
if [ -n "$__CURRENT_GIT_BRANCH_IS_DIRTY" ]; then
s+="⚡"
fi
s+=")"
printf " %s%s" "%{${fg[yellow]}%}" $s
fi
unset __CURRENT_GIT_BRANCH
unset __CURRENT_GIT_BRANCH_STATUS
unset __CURRENT_GIT_BRANCH_IS_DIRTY
local st="$(git status 2>/dev/null)"
if [ -n "$st" ]; then
local -a arr
arr=(${(f)st})
if echo $arr[1] | grep "Not currently on any branch." >/dev/null; then
__CURRENT_GIT_BRANCH='no-branch'
else
__CURRENT_GIT_BRANCH="$(echo $arr[1] | awk ' { print $4 } ')"
fi
if echo $arr[2] | grep "Your branch is" >/dev/null; then
if echo $arr[2] | grep "ahead" >/dev/null; then
__CURRENT_GIT_BRANCH_STATUS='ahead'
elif echo $arr[2] | grep "diverged" >/dev/null; then
__CURRENT_GIT_BRANCH_STATUS='diverged'
else
__CURRENT_GIT_BRANCH_STATUS='behind'
fi
fi
if echo $st | grep "nothing to commit (working directory clean)" >/dev/null; then
else
__CURRENT_GIT_BRANCH_IS_DIRTY='1'
fi
fi
# Initialize colors.
autoload -U colors
colors
# Allow for functions in the prompt.
setopt PROMPT_SUBST
# Autoload zsh functions.
fpath=(~/.zsh/functions $fpath)
autoload -U ~/.zsh/functions/*(:t)
# Enable auto-execution of functions.
typeset -ga preexec_functions
typeset -ga precmd_functions
typeset -ga chpwd_functions
# Append git functions needed for prompt.
preexec_functions+='preexec_update_git_vars'
precmd_functions+='precmd_update_git_vars'
chpwd_functions+='chpwd_update_git_vars'
# Set the prompt.
PROMPT=$'%{${fg[blue]}%}%B%1.%b$(prompt_git_info)%{${fg[default]}%} '
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment