diff options
Diffstat (limited to '.zsh/gitprompt.zsh')
-rw-r--r-- | .zsh/gitprompt.zsh | 68 |
1 files changed, 31 insertions, 37 deletions
diff --git a/.zsh/gitprompt.zsh b/.zsh/gitprompt.zsh index 0a420786..433481b9 100644 --- a/.zsh/gitprompt.zsh +++ b/.zsh/gitprompt.zsh @@ -1,50 +1,50 @@ # Ported from http://sebastiancelis.com/2009/11/16/zsh-prompt-git-users/ -function gitprompt_update -{ - unset __CURRENT_GIT_BRANCH - unset __CURRENT_GIT_BRANCH_STATUS - unset __CURRENT_GIT_BRANCH_IS_DIRTY +function _gitprompt_update { + unset _git_branch + unset _git_status + unset _git_dirty - local st="$(git status 2>/dev/null)" + local st="$(git status 2> /dev/null)" if [[ -n "$st" ]]; then local -a arr arr=(${(f)st}) if [[ $arr[1] =~ 'Not currently on any branch.' ]]; then - __CURRENT_GIT_BRANCH='no-branch' + _git_branch='none' else - __CURRENT_GIT_BRANCH="${arr[1][(w)4]}"; + _git_branch="${arr[1][(w)-1]}" fi if [[ $arr[2] =~ 'Your branch is' ]]; then if [[ $arr[2] =~ 'ahead' ]]; then - __CURRENT_GIT_BRANCH_STATUS='ahead' + _git_status='ahead' elif [[ $arr[2] =~ 'diverged' ]]; then - __CURRENT_GIT_BRANCH_STATUS='diverged' + _git_status='diverged' else - __CURRENT_GIT_BRANCH_STATUS='behind' + _git_status='behind' fi fi - if [[ ! $st =~ 'nothing' ]]; then # Untracked files count as clean - __CURRENT_GIT_BRANCH_IS_DIRTY='1' + if [[ ! $st =~ 'nothing' ]]; then + _git_dirty=1 fi fi } -# Changed around the formatting here a bunch -function gitprompt -{ - if [ -n "$__CURRENT_GIT_BRANCH" ]; then - local s="%{${fg[yellow]}%}" - if [ -n "$__CURRENT_GIT_BRANCH_IS_DIRTY" ]; then +function gitprompt { + if [[ -n "$_git_branch" ]]; then + local s + [[ -z "$1" ]] && s="%{${fg[yellow]}%}" + + if [[ -n "$_git_dirty" ]]; then s+="⚡" else s+=":" fi - s+="$__CURRENT_GIT_BRANCH" - case "$__CURRENT_GIT_BRANCH_STATUS" in + + s+="$_git_branch" + case "$_git_status" in ahead) s+="↑" ;; @@ -56,24 +56,18 @@ function gitprompt ;; esac - echo $s + echo "$s" fi } -function gitprompt_preexec -{ - case "$1" in - g*) # Switched from git* to also detect my short aliases - __EXECUTED_GIT_COMMAND=1 - ;; - esac +function _gitprompt_preexec { + [[ "$1" =~ "^g" ]] && _git_command=1 } -function gitprompt_precmd -{ - if [ -n "$__EXECUTED_GIT_COMMAND" ]; then - gitprompt_update - unset __EXECUTED_GIT_COMMAND +function _gitprompt_precmd { + if [[ -n "$_git_command" ]]; then + _gitprompt_update + unset _git_command fi } @@ -81,6 +75,6 @@ typeset -ga preexec_functions typeset -ga precmd_functions typeset -ga chpwd_functions -preexec_functions+='gitprompt_preexec' -precmd_functions+='gitprompt_precmd' -chpwd_functions+='gitprompt_update' +preexec_functions+='_gitprompt_preexec' +precmd_functions+='_gitprompt_precmd' +chpwd_functions+='_gitprompt_update' |