# prompt RESETCOLOR='' HOSTCOLOR='' PATHCOLOR='' BOLDERRORCOLOR='' BLACKCOLOR='' case "${TERM}" in *256color*|xterm-termite) 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%}' if [ "${TERM_PROGRAM}" = "Apple_Terminal" ] ; then BLACKCOLOR=$'%{\e[00;30m%}' else BLACKCOLOR=$'%{\e[38;5;232m%}' fi ;; dumb) ;; *) if command -v tput >/dev/null 2>&1 && [ `tput colors` != -1 ] ; then 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%}' BLACKCOLOR=$'%{\e[00;30m%}' fi ;; esac 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=">" ZSH_THEME_GIT_PROMPT_SUBMODULE="_" 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 if $(cd "$1" ; git submodule status --recursive 2>/dev/null | egrep '^(\+|-)' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_SUBMODULE$STATUS" fi 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) local ahead="$(git rev-list ${branch}@{upstream}..HEAD 2>/dev/null | wc -l)" gitstatus+=( "${GREEN}+${ahead}${GRAY}" ) # for git prior to 1.7 # behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l) local behind="$(git rev-list HEAD..${branch}@{upstream} 2>/dev/null | wc -l)" gitstatus+=( "${RED}-${behind}${GRAY}" ) 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 local stats="$(git_prompt_status "${repodir}")" 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} cdpath=( . "$repodir" ~ ~/oktagit ~/git .. ) else PROMPT=${RESETCOLOR}${HOSTCOLOR}$'%n@'${LHOSTNAME}${BLACKCOLOR}':'${PATHCOLOR}$'%45<...<%~ %(?..'${BOLDERRORCOLOR}$')%(!.#.$) '${RESETCOLOR} RPROMPT=${RESETCOLOR}$'%1(j.'${JOBCOLOR}$'[%j].)%(?..'${ERRORCOLOR}$'[%?])'${CLOCKCOLOR}$'[%t]'${RESETCOLOR} cdpath=( . ~ ~/oktagit ~/git .. ) fi } updateprompt