- # "cd -" won't work after login by just setting $OLDPWD, so
- [[ -d $dirstack[0] ]] && cd $dirstack[0] && cd $OLDPWD
-fi
-
-chpwd() {
- if is42 ; then
- builtin print -l ${(u)dirstack} >! ${DIRSTACKFILE}
- else
- uprint dirstack >! ${DIRSTACKFILE}
- fi
-}
-
-# }}}
-
-# {{{ display battery status on right side of prompt via running 'BATTERY=1 zsh'
-if [[ -n "$BATTERY" ]] ; then
- if check_com -c acpi ; then
- PERCENT="${(C)${(s| |)$(acpi 2>/dev/null)}[4]}"
- [[ -z "$PERCENT" ]] && PERCENT='acpi not present'
-
- if [[ "${PERCENT%%%}" -lt 20 ]] ; then
- PERCENT="warning: ${PERCENT}%"
- fi
- fi
-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: {{{
-#
-# The vcs_info() feature can be configured via zstyle:
-# First, the context in which we are working:
-# :vcs_info:<vcs-string>
-# ...where <vcs-string> is one of:
-# - git, git-svn, hg, darcs, bzr, mtn, svn, cvs or svk
-#
-# You can of course use ':vcs_info:*' to match all VCSs at once.
-#
-# There is one special context named 'init', that is in effect as long
-# as there was no decision what vcs backend to use.
-#
-# There are currently two styles, that are looked up:
-# promptformat - Used in most circumstances.
-# promptactionformat - Used if a there is a special action going on;
-# (like an interactive rebase or a merge conflict)
-# branchformat - Some backends replace %b in the prompt*format
-# styles above, not only by a branch name but also
-# by a revision number. This style let's you
-# modify how that string should look like.
-# enable - Check in the 'init' context. If set to false,
-# vcs_info() will do nothing.
-# disable - Provide a list of systems, you don't want
-# the prompt to check for repositories (checked
-# in the 'init' context, too).
-# use-simple - If there are two different ways of gathering
-# information, you can select the simpler one
-# by setting this style to true; the default
-# is to use the not-that-simple code, which is
-# potentially a lot slower but might be more
-# accurate in all possible cases.
-#
-# The use-simple style is currently only available for the bzr backend.
-#
-# The default values for these in all contexts are:
-# promptformat " (%s)-[%b|%a]-"
-# promptactionformat " (%s)-[%b]-"
-# branchformat "%b:%r" (for bzr and svn)
-# enable true
-# disable (empty list)
-# use-simple false
-#
-# In the prompt*formats, the following replacements are done:
-# %s - The vcs in use (git, hg, svn etc.)
-# %b - Information about the current branch.
-# %a - An identifier, that describes the action.
-# Only makes sense in promptactionformat.
-# %R - base directory of the repository.
-# %r - repository name
-# If %R is '/foo/bar/repoXY', %r is 'repoXY'.
-#
-# In branchformat these replacements are done:
-# %b - the branch name
-# %r - the current revision number
-#
-# Not all vcs backends may support all replacements
-#
-# Examples:
-# Don't use vcs_info at all (even though it's in your prompt):
-# % zstyle ':vcs_info:*' enable false
-#
-# Don't provide prompt info for bzr and svk:
-# % zstyle ':vcs_info:*' disable bzr svk
-#
-# Provide a prompt specifically for git:
-# % zstyle ':vcs_info:git' promptformat ' GIT, BABY! [%b]'
-# % zstyle ':vcs_info:git' promptactionformat ' GIT ACTION! [%b|%a]'
-#
-# Use the quicker bzr backend (if you do, please report if it does
-# the-right-thing[tm] - thanks):
-# % zstyle ':vcs_info:bzr' use-simple true
-#
-# Display the revision number in yellow for bzr and svn:
-# % zstyle ':vcs_info:(svn|bzr)' branchformat '%b%{'${fg[yellow]}'%}:%r'
-#
-# If you want colors, make sure you enclose the color codes in %{...%},
-# because the string provided by vcs_info() is used for prompts.
-#
-# Example: PROMPT='%(?..[%?]-)%3~%$(vcs_info)#'
-#
-# This *requires* 'setopt prompt_subst'.
-# }}}
-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.
-
- # If there *is* a chpwd() function unfunction it here.
- # The *real* zsh does not loose its chpwd(), because we run
- # in a different context (process substitution in $PROMPT).
- (( ${+functions[chpwd]} )) && unfunction chpwd
- setopt chaselinks
- cd $1 2>/dev/null && pwd
-}
-# }}}
-VCS_INFO_git_getaction () { #{{{
- local gitaction='' gitdir=${1}
- local tmp
-
- for tmp in "${gitdir}/rebase-apply" \
- "${gitdir}/rebase" \
- "${gitdir}/../.dotest" ; do
- if [[ -d ${tmp} ]] ; then
- if [[ -f "${tmp}/rebasing" ]] ; then
- gitaction="rebase"
- elif [[ -f "${tmp}/applying" ]] ; then
- gitaction="am"
- else
- gitaction="am/rebase"
- fi
- printf '%s' ${gitaction}
- return 0
- fi
- done
-
- for tmp in "${gitdir}/rebase-merge/interactive" \
- "${gitdir}/.dotest-merge/interactive" ; do
- if [[ -f "${tmp}" ]] ; then
- printf '%s' "rebase-i"
- return 0
- fi
- done
-
- for tmp in "${gitdir}/rebase-merge" \
- "${gitdir}/.dotest-merge" ; do
- if [[ -d "${tmp}" ]] ; then
- printf '%s' "rebase-m"
- return 0
- fi
- done
-
- if [[ -f "${gitdir}/MERGE_HEAD" ]] ; then
- printf '%s' "merge"
- else
- if [[ -f "${gitdir}/BISECT_LOG" ]] ; then
- printf '%s' "bisect"
- fi
- fi
-
- return 1
-}
-# }}}
-VCS_INFO_git_getbranch () { #{{{
- local gitbranch gitdir=${1}
- local gitsymref='git symbolic-ref HEAD'
-
- if [[ -d "${gitdir}/rebase-apply" ]] \
- || [[ -d "${gitdir}/rebase" ]] \
- || [[ -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
- gitbranch="$(< ${gitdir}/rebase-merge/head-name)"
-
- elif [[ -f "${gitdir}/.dotest-merge/interactive" ]] \
- || [[ -d "${gitdir}/.dotest-merge" ]] ; then
- gitbranch="$(< ${gitdir}/.dotest-merge/head-name)"
-
- else
- gitbranch="$(${(z)gitsymref} 2> /dev/null)"
-
- if [[ $? -ne 0 ]] ; then
- gitbranch="$(git describe --exact-match HEAD 2>/dev/null)"
-
- if [[ $? -ne 0 ]] ; then
- gitbranch="${${"$(< $gitdir/HEAD)"}[1,7]}..."
- fi
- fi
- fi
-
- printf '%s' "${gitbranch##refs/heads/}"
-}
-# }}}
-VCS_INFO_git_get_data () { # {{{
- setopt localoptions extendedglob
- local gitdir gitbase gitbranch gitaction msg
-
- 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})
-
- gitbase=${PWD%/${$(git rev-parse --show-prefix)%/##}}
-
- zformat -f msg "${msg}" "a:${gitaction}" "b:${gitbranch}" "s:${vcs}" "r:${gitbase:t}" "R:${gitbase}"
- printf '%s' ${msg}
-}
-# }}}
-VCS_INFO_darcs_get_data () { # {{{
- local msg darcsbase
-
- darcsbase=${vcs_comm[basedir]}
- msg=$(VCS_INFO_format)
- zformat -f msg "${msg}" "a:" "b:${darcsbase:t}" "s:${vcs}" "r:${darcsbase:t}" "R:${darcsbase}"
- printf '%s' ${msg}
-}
-# }}}
-VCS_INFO_hg_get_data () { # {{{
- local msg hgbranch hgbase
-
- 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}"
- printf '%s' ${msg}
-}
-# }}}
-VCS_INFO_mtn_get_data () { # {{{
- local msg mtnbranch mtnbase
-
- mtnbase=${vcs_comm[basedir]}
- mtnbranch=$(mtn status | awk '/Current branch:/{ sub("Current branch: ", ""); print }')
- msg=$(VCS_INFO_format)
- zformat -f msg "${msg}" "a:" "b:${mtnbranch}" "s:${vcs}" "r:${mtnbase:t}" "R:${mtnbase}"
- printf '%s' ${msg}
-}
-# }}}
-VCS_INFO_svk_get_data () { # {{{
- local msg svkbranch svkbase
-
- svkbase=${vcs_comm[basedir]}
- svkbranch=${svkbase##*
- }
- svkbase=${svkbase%%
- *}
-
- msg=$(VCS_INFO_format)
- zformat -f msg "${msg}" "a:" "b:${svkbranch}" "s:${vcs}" "r:${svkbase:t}" "R:${svkbase}"
- printf '%s' ${msg}
-}
-# }}}
-VCS_INFO_svn_get_data () { # {{{
- setopt localoptions noksharrays
- local msg svnbase svnbranch
- local -a svninfo
-
- svnbase="."
- while [[ -d "${svnbase}/../.svn" ]]; do
- svnbase="${svnbase}/.."
- done
- svnbase=$(VCS_INFO_realpath ${svnbase})
- svninfo=($(svn info "${svnbase}" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r"\n"$0 }'))
-
- zstyle -s ":vcs_info:${vcs}" branchformat svnbranch || svnbranch="%b:%r"
- zformat -f svnbranch "${svnbranch}" "b:${svninfo[1]}" "r:${svninfo[2]}"
-
- msg=$(VCS_INFO_format)
- zformat -f msg "${msg}" "a:" "b:${svnbranch}" "s:${vcs}" "r:${svnbase:t}" "R:${svnbase}"
- printf '%s' ${msg}
-}
-# }}}
-VCS_INFO_bzr_get_data () { # {{{
- local msg bzrbranch bzrbase bzrrevno bzrbr i j
-
- if zstyle -t ":vcs_info:${vcs}" "use-simple" ; then
- bzrbase=${vcs_comm[basedir]}
- bzrbranch=${bzrbase:t}
- if [[ -f ${bzrbase}/.bzr/branch/last-revision ]] ; then
- bzrrevno=$(< ${bzrbase}/.bzr/branch/last-revision)
- bzrrevno=${bzrrevno%% *}
- fi
- else
- bzrbase=$(bzr info 2>/dev/null | sed -rne 's, *branch root: ,,p')
- bzrbase=$(VCS_INFO_realpath ${bzrbase})
-
- bzr version-info 2> /dev/null | while read i j; do
- case "${i}" in
- revno:)
- bzrrevno=${j} ;;
- branch-nick:)
- bzrbranch=${j} ;;
- esac
- done
- fi
-
- zstyle -s ":vcs_info:${vcs}" branchformat bzrbr || bzrbr="%b:%r"
- zformat -f bzrbr "${bzrbr}" "b:${bzrbranch}" "r:${bzrrevno}"
-
- msg=$(VCS_INFO_format)
- zformat -f msg "${msg}" "a:" "b:${bzrbr}" "s:${vcs}" "r:${bzrbase:t}" "R:${bzrbase}"
- printf '%s' ${msg}
-}
-# }}}
-VCS_INFO_cvs_get_data () { # {{{
- local msg cvsbranch cvsbase basename
-
- cvsbase="."
- while [[ -d "${cvsbase}/../CVS" ]]; do
- cvsbase="${cvsbase}/.."
- done
- cvsbase=$(VCS_INFO_realpath ${cvsbase})
- cvsbranch=$(< ./CVS/Repository)
- basename=${cvsbase:t}
- cvsbranch=${cvsbranch##${basename}/}
- [[ -z ${cvsbranch} ]] && cvsbranch=${basename}
-
- msg=$(VCS_INFO_format)
- zformat -f msg "${msg}" "a:" "b:${cvsbranch}" "s:${vcs}" "r:${basename}" "R:${cvsbase}"
- printf '%s' ${msg}
-}
-# }}}
-# VCS_INFO_*_detect () {{{
-
-VCS_INFO_detect_by_dir() {
- local dirname=${1}
- local basedir="." realbasedir
-
- realbasedir=$(VCS_INFO_realpath ${basedir})
- while [[ ${realbasedir} != '/' ]]; do
- if [[ -n ${vcs_comm[detect_need_file]} ]] ; then
- [[ -d ${basedir}/${dirname} ]] && \
- [[ -f ${basedir}/${dirname}/${vcs_comm[detect_need_file]} ]] && \
- break
- else
- [[ -d ${basedir}/${dirname} ]] && break
- fi
-
- basedir=${basedir}/..
- realbasedir=$(VCS_INFO_realpath ${basedir})
- done
-
- [[ ${realbasedir} == "/" ]] && return 1
- vcs_comm[basedir]=${realbasedir}
- return 0
-}
-
-VCS_INFO_bzr_detect() {
- check_com -c bzr || return 1
- vcs_comm[detect_need_file]=branch/format
- VCS_INFO_detect_by_dir '.bzr'
- return $?
-}
-
-VCS_INFO_cvs_detect() {
- check_com -c svn || return 1
- [[ -d "CVS" ]] && return 0
- return 1
-}
-
-VCS_INFO_darcs_detect() {
- check_com -c darcs || return 1
- vcs_comm[detect_need_file]=format
- VCS_INFO_detect_by_dir '_darcs'
- return $?
-}
-
-VCS_INFO_git_detect() {
- 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() {
- check_com -c hg || return 1
- vcs_comm[detect_need_file]=branch
- VCS_INFO_detect_by_dir '.hg'
- return $?
-}