fi
# }}}
+# set colors for use in prompts {{{
+if zrcautoload colors && colors 2>/dev/null ; then
+ BLUE="%{${fg[blue]}%}"
+ RED="%{${fg_bold[red]}%}"
+ GREEN="%{${fg[green]}%}"
+ CYAN="%{${fg[cyan]}%}"
+ MAGENTA="%{${fg[magenta]}%}"
+ YELLOW="%{${fg[yellow]}%}"
+ WHITE="%{${fg[white]}%}"
+ NO_COLOUR="%{${reset_color}%}"
+else
+ BLUE=$'%{\e[1;34m%}'
+ RED=$'%{\e[1;31m%}'
+ GREEN=$'%{\e[1;32m%}'
+ CYAN=$'%{\e[1;36m%}'
+ WHITE=$'%{\e[1;37m%}'
+ MAGENTA='%{\e[1;35m%}'
+ YELLOW='%{\e[1;33m%}'
+ NO_COLOUR=$'%{\e[0m%}'
+fi
+
+# }}}
+
# gather version control information for inclusion in a prompt {{{
# vcs_info() documentation: {{{
#
# This *requires* 'setopt prompt_subst'.
# }}}
-VCS_INFO_default_action_format=' (%s)-[%b|%a]-'
-VCS_INFO_default_format=' (%s)-[%b]-'
+VCS_INFO_adjust () { #{{{
+ [[ -n ${vcs_comm[overwrite_name]} ]] && vcs=${vcs_comm[overwrite_name]}
+ return 0
+}
+# }}}
+VCS_INFO_format () { # {{{
+ local msg
+
+ if [[ -n ${1} ]] ; then
+ zstyle -s ":vcs_info:${vcs}" promptactionformat msg
+ [[ -z ${msg} ]] && msg=' (%s)-[%b|%a]-'
+ else
+ zstyle -s ":vcs_info:${vcs}" promptformat msg
+ [[ -z ${msg} ]] && msg=' (%s)-[%b]-'
+ fi
+ printf '%s' ${msg}
+}
+# }}}
VCS_INFO_realpath () { #{{{
# replacing 'readlink -f', which is really not portable.
(( ${+functions[chpwd]} )) && unfunction chpwd
else
gitaction="am/rebase"
fi
- print '%s' ${gitaction}
+ printf '%s' ${gitaction}
return 0
fi
done
|| [[ -d "${gitdir}/../.dotest" ]] \
|| [[ -f "${gitdir}/MERGE_HEAD" ]] ; then
gitbranch="$(${(z)gitsymref} 2> /dev/null)"
+ [[ -z ${gitbranch} ]] && gitbranch="$(< ${gitdir}/rebase-apply/head-name)"
elif [[ -f "${gitdir}/rebase-merge/interactive" ]] \
|| [[ -d "${gitdir}/rebase-merge" ]] ; then
setopt localoptions extendedglob
local gitdir gitbase gitbranch gitaction msg
- gitdir="$(git rev-parse --git-dir 2> /dev/null)"
-
- if [[ $? -eq 0 ]] ; then
- gitbranch="$(VCS_INFO_git_getbranch ${gitdir})"
- fi
+ gitdir=${vcs_comm[gitdir]}
+ gitbranch="$(VCS_INFO_git_getbranch ${gitdir})"
if [[ -z ${gitdir} ]] || [[ -z ${gitbranch} ]] ; then
return
fi
+ VCS_INFO_adjust
gitaction="$(VCS_INFO_git_getaction ${gitdir})"
msg=$(VCS_INFO_format ${gitaction})
VCS_INFO_hg_get_data () { # {{{
local msg hgbranch hgbase
- hgbase=${1}
+ hgbase=${vcs_comm[basedir]}
hgbranch=$(< ${hgbase}/.hg/branch)
msg=$(VCS_INFO_format)
zformat -f msg "${msg}" "a:" "b:${hgbranch}" "s:${vcs}" "r:${hgbase:t}" "R:${hgbase}"
VCS_INFO_svk_get_data () { # {{{
local msg svkbranch svkbase
- svkbase=${1}
+ svkbase=${vcs_comm[basedir]}
svkbranch=${svkbase##*
}
svkbase=${svkbase%%
# }}}
# VCS_INFO_*_detect () {{{
+VCS_INFO_detect_by_dir() {
+ local dirname=${1}
+ local basedir="."
+
+ while [[ ! -d ${basedir}/${dirname} ]]; do
+ basedir=${basedir}/..
+ [[ $(VCS_INFO_realpath ${basedir}) = "/" ]] && return 1
+ done
+
+ vcs_comm[basedir]=${basedir}
+ return 0
+}
+
VCS_INFO_bzr_detect() {
check_com -c bzr || return 1
- [[ -d ".bzr" ]] && return 0
- return 1
+ VCS_INFO_detect_by_dir '.bzr'
+ return $?
}
VCS_INFO_git_detect() {
- check_com -c git && git rev-parse --is-inside-work-tree &> /dev/null && return 0
+ if check_com -c git && git rev-parse --is-inside-work-tree &> /dev/null ; then
+ vcs_comm[gitdir]="$(git rev-parse --git-dir 2> /dev/null)" || return 1
+ [[ -d ${vcs_comm[gitdir]}/svn ]] && vcs_comm[overwrite_name]='git-svn'
+ return 0
+ fi
return 1
}
VCS_INFO_hg_detect() {
- local basedir="."
-
check_com -c hg || return 1
- while [[ ! -d ${basedir}/.hg ]]; do
- basedir=${basedir}/..
- [[ $(VCS_INFO_realpath ${basedir}) = "/" ]] && return 1
- done
-
- printf '%s' $(VCS_INFO_realpath ${basedir})
- return 0
+ VCS_INFO_detect_by_dir '.hg'
+ return $?
}
VCS_INFO_svk_detect() {
- local output
+ local basedir
check_com -c svk || return 1
[[ -f ~/.svk/config ]] || return 1
- output=$(awk '/: *$/ { sub(/^ */,"",$0); sub(/: *$/,"",$0); if (match("'${PWD}'", $0"(/|$)")) { print $0; d=1; } } /depotpath/ && d == 1 { sub(".*/","",$0); r=$0 } /revision/ && d == 1 { print r ":" $2; exit 1 }' ~/.svk/config) && return 1
+ basedir=$(awk '/: *$/ { sub(/^ */,"",$0); sub(/: *$/,"",$0); if (match("'${PWD}'", $0"(/|$)")) { print $0; d=1; } } /depotpath/ && d == 1 { sub(".*/","",$0); r=$0 } /revision/ && d == 1 { print r ":" $2; exit 1 }' ~/.svk/config) && return 1
- printf '%s' ${output}
+ vcs_comm[basedir]=${basedir}
return 0
}
}
# }}}
-VCS_INFO_format () { # {{{
- local msg
-
- if [[ -n ${1} ]] ; then
- zstyle -s ":vcs_info:${vcs}" promptactionformat msg
- [[ -z ${msg} ]] && msg=${VCS_INFO_default_action_format}
- else
- zstyle -s ":vcs_info:${vcs}" promptformat msg
- [[ -z ${msg} ]] && msg=${VCS_INFO_default_format}
- fi
- printf '%s' ${msg}
-}
-# }}}
vcs_info () { # {{{
- local string output
+ local string
local -i found
local -a VCSs
local -x vcs
+ local -Ax vcs_comm
vcs="init"
zstyle -T ":vcs_info:${vcs}" "enable" || return 0
(( found = 0 ))
for vcs in ${VCSs} ; do
- output=$(VCS_INFO_${vcs}_detect) && (( found = 1 )) && break
+ vcs_comm=()
+ VCS_INFO_${vcs}_detect && (( found = 1 )) && break
done
(( found == 0 )) && return 0
- string=$(VCS_INFO_${vcs}_get_data ${output}) || return 1
+ string=$(VCS_INFO_${vcs}_get_data) || return 1
printf '%s' ${string}
return 0
}
zstyle ':vcs_info:*' promptformat "(%s%)-[%b] "
else
# these are the same, just with a lot of colours:
- zstyle ':vcs_info:*' promptactionformat \
-"%{${fg[magenta]}%}(%{${reset_color}%}%s%{${fg[magenta]}%})%{${fg[yellow]}%}-%{${fg[magenta]}%}[%{${fg[green]}%}%b%{${fg[yellow]}%}|%{${fg[red]}%}%a%{${fg[magenta]}%}]%{${reset_color}%} "
- zstyle ':vcs_info:*' promptformat \
-"%{${fg[magenta]}%}(%{${reset_color}%}%s%{${fg[magenta]}%})%{${fg[yellow]}%}-%{${fg[magenta]}%}[%{${fg[green]}%}%b%{${fg[magenta]}%}]%{${reset_color}%} "
+ zstyle ':vcs_info:*' promptactionformat "${MAGENTA}(${NO_COLOUR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${YELLOW}|${RED}%a${MAGENTA}]${NO_COLOUR} "
+ zstyle ':vcs_info:*' promptformat "${MAGENTA}(${NO_COLOUR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${MAGENTA}]${NO_COLOUR}%} "
fi
# }}}
esac
}
-# set colors
-if zrcautoload colors && colors 2>/dev/null ; then
- BLUE="%{${fg[blue]}%}"
- RED="%{${fg_bold[red]}%}"
- GREEN="%{${fg[green]}%}"
- CYAN="%{${fg[cyan]}%}"
- WHITE="%{${fg[white]}%}"
- NO_COLOUR="%{${reset_color}%}"
-else
- BLUE=$'%{\e[1;34m%}'
- RED=$'%{\e[1;31m%}'
- GREEN=$'%{\e[1;32m%}'
- CYAN=$'%{\e[1;36m%}'
- WHITE=$'%{\e[1;37m%}'
- NO_COLOUR=$'%{\e[0m%}'
-fi
-
EXITCODE="%(?..%?%1v )"
PS2='`%_> ' # secondary prompt, printed when the shell needs more information to complete a command.
PS3='?# ' # selection prompt used within a select loop.