-isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history
-
-# }}}
-
-# dirstack handling {{{
-
-DIRSTACKSIZE=${DIRSTACKSIZE:-20}
-DIRSTACKFILE=${DIRSTACKFILE:-${HOME}/.zdirs}
-
-if [[ -f ${DIRSTACKFILE} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
- dirstack=( ${(f)"$(< $DIRSTACKFILE)"} )
- # "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, hg, bzr, svn 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)
-# enable - check in the 'init' context. If set to false,
-# vcs_info() will do nothing.
-#
-# The default values for these in all contexts are:
-# promptformat " (%s)-[%b|%a]-"
-# promptactionformat " (%s)-[%b]-"
-# enable true
-#
-# In these 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'.
-#
-# Not all vcs backends may support all replacements
-#
-# If you want colors, make sure you enclose the color codes in %{...%}, because
-# the string provided by vcs_info() is commonly used for prompts.
-#
-# Example: PROMPT='%(?..[%?]-)%3~%$(vcs_info)#'
-#
-# This *requires* 'setopt prompt_subst'.
-# }}}
-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
- 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="$(git rev-parse --git-dir 2> /dev/null)"
-
- if [[ $? -eq 0 ]] ; then
- gitbranch="$(VCS_INFO_git_getbranch ${gitdir})"
- fi
-
- if [[ -z ${gitdir} ]] || [[ -z ${gitbranch} ]] ; then
- return
- fi
-
- 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_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_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 () { # {{{
- local msg svnbranch svnbase
-
- svnbase="."
- while [[ -d "${svnbase}/../.svn" ]]; do
- svnbase="${svnbase}/.."
- done
- svnbase=$(VCS_INFO_realpath ${svnbase})
- svnbranch=$(svn info "$base_dir" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r":"$0 }')
-
- 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 i j
-
- bzrbase=$(bzr info | sed -rne 's, *branch root: ,,p')
- case ${bzrbase} in
- .) bzrbase=${PWD} ;;
- esac
-
- bzr version-info | while read i j; do
- case "${i}" in
- revno:)
- bzrrevno=${j} ;;
- branch-nick:)
- bzrbranch=${j} ;;
- esac
- done
-
- msg=$(VCS_INFO_format)
- zformat -f msg "${msg}" "a:" "b:${bzrbranch}:${bzrrevno}" "s:${vcs}" "r:${bzrbase:t}" "R:${bzrbase}"
- printf '%s' ${msg}
-}
-# }}}
-# 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
- 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
- return 1
-}
-
-VCS_INFO_hg_detect() {
- check_com -c hg || return 1
- VCS_INFO_detect_by_dir '.hg'
- return $?
-}