X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=c3535f2b76b25a2358d1244b918deaf4115c627f;hb=refs%2Ftags%2F0.3.53;hp=1914d3927ed07e8dfc2d6f66847a327dea874649;hpb=9d9ba039e307d69f0198724f865ae2484cd7ba05;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 1914d39..c3535f2 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -1026,8 +1026,8 @@ else GREEN=$'%{\e[1;32m%}' CYAN=$'%{\e[1;36m%}' WHITE=$'%{\e[1;37m%}' - MAGENTA='%{\e[1;35m%}' - YELLOW='%{\e[1;33m%}' + MAGENTA=$'%{\e[1;35m%}' + YELLOW=$'%{\e[1;33m%}' NO_COLOUR=$'%{\e[0m%}' fi @@ -1037,10 +1037,11 @@ fi # vcs_info() documentation: {{{ # -# The vcs_info () feature can be configured via zstyle: +# The vcs_info() feature can be configured via zstyle: # First, the context in which we are working: # :vcs_info: -# ...where is one of: git, hg, bzr, svn or svk +# ...where is one of: +# - git, git-svn, hg, darcs, bzr, mtn, svn or svk # # You can of course use ':vcs_info:*' to match all VCSs at once. # @@ -1053,6 +1054,9 @@ fi # (like an interactive rebase or a merge conflict) # 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). # # The default values for these in all contexts are: # promptformat " (%s)-[%b|%a]-" @@ -1070,8 +1074,19 @@ fi # # 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]' +# # If you want colors, make sure you enclose the color codes in %{...%}, because -# the string provided by vcs_info() is commonly used for prompts. +# the string provided by vcs_info() is used for prompts. # # Example: PROMPT='%(?..[%?]-)%3~%$(vcs_info)#' # @@ -1097,6 +1112,10 @@ VCS_INFO_format () { # {{{ # }}} 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 @@ -1204,6 +1223,15 @@ VCS_INFO_git_get_data () { # {{{ 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 @@ -1214,6 +1242,16 @@ VCS_INFO_hg_get_data () { # {{{ 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 @@ -1246,12 +1284,10 @@ VCS_INFO_svn_get_data () { # {{{ 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 + bzrbase=$(bzr info 2>/dev/null | sed -rne 's, *branch root: ,,p') + bzrbase=$(VCS_INFO_realpath ${bzrbase}) - bzr version-info | while read i j; do + bzr version-info 2> /dev/null | while read i j; do case "${i}" in revno:) bzrrevno=${j} ;; @@ -1269,23 +1305,41 @@ VCS_INFO_bzr_get_data () { # {{{ VCS_INFO_detect_by_dir() { local dirname=${1} - local basedir="." + 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 - while [[ ! -d ${basedir}/${dirname} ]]; do basedir=${basedir}/.. - [[ $(VCS_INFO_realpath ${basedir}) = "/" ]] && return 1 + realbasedir=$(VCS_INFO_realpath ${basedir}) done - vcs_comm[basedir]=${basedir} + [[ ${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_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 @@ -1297,10 +1351,18 @@ VCS_INFO_git_detect() { VCS_INFO_hg_detect() { check_com -c hg || return 1 + vcs_comm[detect_need_file]=branch VCS_INFO_detect_by_dir '.hg' return $? } +VCS_INFO_mtn_detect() { + check_com -c mtn || return 1 + vcs_comm[detect_need_file]=revision + VCS_INFO_detect_by_dir '_MTN' + return $? +} + VCS_INFO_svk_detect() { local basedir @@ -1323,17 +1385,19 @@ VCS_INFO_svn_detect() { vcs_info () { # {{{ local string local -i found - local -a VCSs + local -a VCSs disabled local -x vcs local -Ax vcs_comm vcs="init" zstyle -T ":vcs_info:${vcs}" "enable" || return 0 + zstyle -a ":vcs_info:${vcs}" "disable" disabled - VCSs=(git hg bzr svn svk) + VCSs=(git hg bzr darcs mtn svn svk) (( found = 0 )) for vcs in ${VCSs} ; do + [[ -n ${(M)disabled:#${vcs}} ]] && continue vcs_comm=() VCS_INFO_${vcs}_detect && (( found = 1 )) && break done @@ -2334,7 +2398,7 @@ bk() { # }}} # {{{ make sure our environment is clean regarding colors -for color in BLUE RED GREEN CYAN WHITE ; unset $color +for color in BLUE RED GREEN CYAN YELLOW MAGENTA WHITE ; unset $color # }}} # source another config file if present {{{