2009-01-02 18:37:27 -05:00
|
|
|
# prompt
|
2010-08-15 15:43:18 -04:00
|
|
|
RESETCOLOR=''
|
|
|
|
HOSTCOLOR=''
|
|
|
|
PATHCOLOR=''
|
|
|
|
BOLDERRORCOLOR=''
|
2010-09-02 22:03:39 -05:00
|
|
|
BLACKCOLOR=''
|
2010-08-15 15:43:18 -04:00
|
|
|
|
|
|
|
case "${TERM}" in
|
2016-11-03 21:30:53 -07:00
|
|
|
*256color*|xterm-termite)
|
2010-08-15 15:43:18 -04:00
|
|
|
RESETCOLOR=$'%{\e[00;00m%}'
|
|
|
|
if [ -z "${SSH_TTY}" ] ; then
|
|
|
|
HOSTCOLOR=$'%{\e[01;38;5;113m%}'
|
|
|
|
else
|
|
|
|
HOSTCOLOR=$'%{\e[01;38;5;80m%}'
|
|
|
|
fi
|
|
|
|
PATHCOLOR=$'%{\e[38;5;74m%}'
|
|
|
|
ERRORCOLOR=$'%{\e[38;5;1m%}'
|
|
|
|
BOLDERRORCOLOR=$'%{\e[01;38;5;9m%}'
|
|
|
|
CLOCKCOLOR=$'%{\e[01;38;5;221m%}'
|
|
|
|
JOBCOLOR=$'%{\e[38;5;30m%}'
|
2010-09-19 16:40:57 -05:00
|
|
|
if [ "${TERM_PROGRAM}" = "Apple_Terminal" ] ; then
|
|
|
|
BLACKCOLOR=$'%{\e[00;30m%}'
|
|
|
|
else
|
|
|
|
BLACKCOLOR=$'%{\e[38;5;232m%}'
|
|
|
|
fi
|
2010-08-15 15:43:18 -04:00
|
|
|
;;
|
|
|
|
dumb)
|
|
|
|
;;
|
|
|
|
*)
|
2010-09-02 11:49:57 -05:00
|
|
|
if command -v tput >/dev/null 2>&1 && [ `tput colors` != -1 ] ; then
|
2010-08-15 15:43:18 -04:00
|
|
|
RESETCOLOR=$'%{\e[00;00m%}'
|
|
|
|
if [ -z "${SSH_TTY}" ] ; then
|
|
|
|
HOSTCOLOR=$'%{\e[01;32m%}'
|
|
|
|
else
|
|
|
|
HOSTCOLOR=$'%{\e[01;36m%}'
|
|
|
|
fi
|
|
|
|
PATHCOLOR=$'%{\e[01;34m%}'
|
|
|
|
ERRORCOLOR=$'%{\e[00;31m%}'
|
|
|
|
BOLDERRORCOLOR=$'%{\e[01;31m%}'
|
|
|
|
CLOCKCOLOR=$'%{\e[01;33m%}'
|
|
|
|
JOBCOLOR=$'%{\e[00;36m%}'
|
2010-09-02 22:00:55 -05:00
|
|
|
BLACKCOLOR=$'%{\e[00;30m%}'
|
2010-08-15 15:43:18 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2012-02-15 01:23:29 -06:00
|
|
|
GREEN=$'%{\e[01;32m%}'
|
|
|
|
RED=$'%{\e[01;31m%}'
|
|
|
|
GRAY=$'%{\e[01;30m%}'
|
|
|
|
PURPLE=$'%{\e[00;35m%}'
|
|
|
|
YELLOW=$'%{\e[01;33m%}'
|
|
|
|
function havegit () {
|
|
|
|
if which git > /dev/null
|
|
|
|
then
|
|
|
|
local g="$(git rev-parse --git-dir 2>/dev/null)"
|
|
|
|
if [ -n "$g" ]
|
|
|
|
then
|
|
|
|
true
|
|
|
|
else
|
|
|
|
false
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
false
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
ZSH_THEME_GIT_PROMPT_UNTRACKED="?"
|
|
|
|
ZSH_THEME_GIT_PROMPT_ADDED="+"
|
|
|
|
ZSH_THEME_GIT_PROMPT_MODIFIED="!"
|
|
|
|
ZSH_THEME_GIT_PROMPT_DELETED="-"
|
|
|
|
ZSH_THEME_GIT_PROMPT_UNMERGED="&"
|
|
|
|
ZSH_THEME_GIT_PROMPT_RENAMED=">"
|
2012-10-21 16:47:53 -05:00
|
|
|
ZSH_THEME_GIT_PROMPT_SUBMODULE="_"
|
2012-02-15 01:23:29 -06:00
|
|
|
git_prompt_status() {
|
|
|
|
INDEX=$(git status --porcelain 2> /dev/null)
|
|
|
|
STATUS=""
|
|
|
|
if $(echo "$INDEX" | grep '^?? ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS"
|
|
|
|
fi
|
|
|
|
if $(echo "$INDEX" | grep '^A ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS"
|
|
|
|
elif $(echo "$INDEX" | grep '^M ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS"
|
|
|
|
fi
|
|
|
|
if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"
|
|
|
|
elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"
|
|
|
|
elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"
|
|
|
|
fi
|
|
|
|
if $(echo "$INDEX" | grep '^R ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS"
|
|
|
|
fi
|
|
|
|
if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
|
|
|
|
elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
|
|
|
|
fi
|
|
|
|
if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then
|
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS"
|
|
|
|
fi
|
2013-08-05 16:44:55 -07:00
|
|
|
if $(cd "$1" ; git submodule status --recursive 2>/dev/null | egrep '^(\+|-)' &> /dev/null); then
|
2012-10-21 16:47:53 -05:00
|
|
|
STATUS="$ZSH_THEME_GIT_PROMPT_SUBMODULE$STATUS"
|
|
|
|
fi
|
2012-02-15 01:23:29 -06:00
|
|
|
echo $STATUS
|
|
|
|
}
|
|
|
|
function updateprompt () {
|
|
|
|
if havegit ; then
|
|
|
|
local gitdir="$(readlink -m $(git rev-parse --git-dir 2>/dev/null))"
|
|
|
|
local repodir="$(dirname "${gitdir}")"
|
|
|
|
local reponame="$(basename "${repodir}")"
|
|
|
|
local curdir="$(pwd)"
|
|
|
|
local repopath=".${curdir#${repodir}}"
|
|
|
|
local additional
|
|
|
|
local branch
|
|
|
|
if [ -d "$gitdir/rebase-apply" ]; then
|
|
|
|
if test -f "$gitdir/rebase-apply/rebasing"; then
|
|
|
|
additional="|${PURPLE}REBASE"
|
|
|
|
elif test -f "$gitdir/rebase-apply/applying"; then
|
|
|
|
additional="|${PURPLE}AM"
|
|
|
|
else
|
|
|
|
additional="|${PURPLE}AM/REBASE"
|
|
|
|
fi
|
|
|
|
branch="$(git symbolic-ref HEAD 2>/dev/null)"
|
|
|
|
elif [ -f "$gitdir/rebase-merge/interactive" ]; then
|
|
|
|
additional="|${PURPLE}REBASE-i"
|
|
|
|
branch="$(cat "$gitdir/rebase-merge/head-name")"
|
|
|
|
elif [ -d "$gitdir/rebase-merge" ]; then
|
|
|
|
additional="|${PURPLE}REBASE-m"
|
|
|
|
branch="$(cat "$gitdir/rebase-merge/head-name")"
|
|
|
|
elif [ -f "$gitdir/MERGE_HEAD" ]; then
|
|
|
|
additional="|${PURPLE}MERGING"
|
|
|
|
branch="$(git symbolic-ref HEAD 2>/dev/null)"
|
|
|
|
else
|
|
|
|
if [ -f "$gitdir/BISECT_LOG" ]; then
|
|
|
|
additional="|${PURPLE}BISECTING"
|
|
|
|
fi
|
|
|
|
if ! branch="$(git symbolic-ref HEAD 2>/dev/null)"; then
|
|
|
|
if ! branch="$(git describe --exact-match HEAD 2>/dev/null)"; then
|
|
|
|
branch="$(cut -c1-7 "$gitdir/HEAD")..."
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
branch="${branch##refs/heads/}"
|
|
|
|
local remote=${$(git rev-parse --verify ${branch}@{upstream} --symbolic-full-name 2>/dev/null)/refs\/remotes\/}
|
|
|
|
local remotepart=""
|
|
|
|
local -a gitstatus
|
|
|
|
if [[ -n ${remote} ]] ; then
|
|
|
|
# for git prior to 1.7
|
|
|
|
# ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
|
2012-09-25 19:00:00 -05:00
|
|
|
local ahead="$(git rev-list ${branch}@{upstream}..HEAD 2>/dev/null | wc -l)"
|
2012-02-15 01:23:29 -06:00
|
|
|
gitstatus+=( "${GREEN}+${ahead}${GRAY}" )
|
2010-08-15 15:43:18 -04:00
|
|
|
|
2012-02-15 01:23:29 -06:00
|
|
|
# for git prior to 1.7
|
|
|
|
# behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
|
2012-09-25 19:00:00 -05:00
|
|
|
local behind="$(git rev-list HEAD..${branch}@{upstream} 2>/dev/null | wc -l)"
|
2012-02-15 01:23:29 -06:00
|
|
|
gitstatus+=( "${RED}-${behind}${GRAY}" )
|
2010-08-15 15:43:18 -04:00
|
|
|
|
2012-02-15 01:23:29 -06:00
|
|
|
remotepart="${RESETCOLOR}${GRAY}[${remote} ${(j:/:)gitstatus}]${RESETCOLOR}"
|
|
|
|
fi
|
|
|
|
local stashpart=""
|
|
|
|
if [[ -s ${gitdir}/refs/stash ]] ; then
|
|
|
|
stashes=$(git stash list 2>/dev/null | wc -l)
|
|
|
|
stashpart="${RESETCOLOR}${GRAY}(${GREEN}${stashes}${GRAY} stashed)${RESETCOLOR}"
|
|
|
|
fi
|
2012-10-21 16:47:53 -05:00
|
|
|
local stats="$(git_prompt_status "${repodir}")"
|
2012-02-15 01:23:29 -06:00
|
|
|
PROMPT=${RESETCOLOR}${HOSTCOLOR}$'%n@'${LHOSTNAME}${BLACKCOLOR}':'${PATHCOLOR}"${reponame} ${RED}${branch}${YELLOW}${stats}${BLACKCOLOR}${additional} ${PATHCOLOR}"$'%45<...<'"${repopath}"' %(?..'${BOLDERRORCOLOR}$')%(!.#.$) '${RESETCOLOR}
|
|
|
|
RPROMPT=${RESETCOLOR}${stashpart}${remotepart}$'%1(j.'${JOBCOLOR}$'[%j].)%(?..'${ERRORCOLOR}$'[%?])'${CLOCKCOLOR}$'[%t]'${RESETCOLOR}
|
2013-08-05 16:44:55 -07:00
|
|
|
cdpath=( . "$repodir" ~ ~/oktagit ~/git .. )
|
2012-02-15 01:23:29 -06:00
|
|
|
else
|
|
|
|
PROMPT=${RESETCOLOR}${HOSTCOLOR}$'%n@'${LHOSTNAME}${BLACKCOLOR}':'${PATHCOLOR}$'%45<...<%~ %(?..'${BOLDERRORCOLOR}$')%(!.#.$) '${RESETCOLOR}
|
|
|
|
RPROMPT=${RESETCOLOR}$'%1(j.'${JOBCOLOR}$'[%j].)%(?..'${ERRORCOLOR}$'[%?])'${CLOCKCOLOR}$'[%t]'${RESETCOLOR}
|
2013-08-05 16:44:55 -07:00
|
|
|
cdpath=( . ~ ~/oktagit ~/git .. )
|
2012-02-15 01:23:29 -06:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
updateprompt
|