Search code examples
gitsshterminalzsh

zsh - show if git branch have unpushed commits


Actually Im using a slightly modified version of the oh my zsh theme blinks. It show a SSH statement just for optical difference to my local terminal. Also it show the branch and a little star if there are uncommitted changes in the branch.

Is it possible to show that there are unpushed commitments? Maybe also with a little indicator.

# https://github.com/blinks zsh theme

function _prompt_char() {
  if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
    echo "%{%F{blue}%}±%{%f%k%b%}"
  else
    echo ' '
  fi
}

case ${SOLARIZED_THEME:-dark} in
    light) bkg=white;;
    *)     bkg=black;;
esac

ZSH_THEME_GIT_PROMPT_PREFIX=" [%{%B%F{blue}%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{%f%k%b%K{${bkg}}%B%F{green}%}]"
ZSH_THEME_GIT_PROMPT_DIRTY=" %{%F{red}%}*%{%f%k%b%}"
ZSH_THEME_GIT_PROMPT_CLEAN=""

PROMPT='%{%f%k%b%}

%{%K{black}%B%F{green}%}%n%{%B%F{blue}%}@%{%B%F{cyan}%}%m%{%B%F{green}%} %{%B%F{red}%}!!SSH!! %{%b%F{yellow}%K{black}%}%~%{%B%F{green}%}$(git_prompt_info)%E%{%f%k%b%}
%{%K{black}%}$(_prompt_char)%{%K{black}%} %#%{%f%k%b%} '

RPROMPT='!%{%B%F{cyan}%}%!%{%f%k%b%}'

thanks in advance denym


Solution

  • You should use vcs_info module come with zsh.

    There is a very detail tutorial shows you how to do it: http://arjanvandergaag.nl/blog/customize-zsh-prompt-with-vcs-info.html

    Normally you only need to have ${vcs_info_msg_0_} in your $PROMPT variable after you properly load the vcs_info module, but you can customized the prompt format if you don't like the default one.

    BTW, vcs_info, as the name has suggested, also support other VCSs, e.g. svn, hg, cvs, etc.