X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=899cc337de2df1a4c5346c6eec24c3ec0026542c;hb=5e588b6d52992e691b406d3f3df175d2cf972d9b;hp=7a5f2f39ccb6088dd5dff666cf0faea7e40209f4;hpb=7d52381ce375b3b2b55b7bdbfa9a4393e94bd066;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 7a5f2f3..899cc33 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -109,6 +109,11 @@ is42(){ return 1 } +is425(){ + [[ $ZSH_VERSION == 4.2.<5->* || $ZSH_VERSION == 4.<3->* || $ZSH_VERSION == <5->* ]] && return 0 + return 1 +} + is43(){ [[ $ZSH_VERSION == 4.<3->* || $ZSH_VERSION == <5->* ]] && return 0 return 1 @@ -1010,57 +1015,204 @@ if [[ -n "$BATTERY" ]] ; then 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: +# This functionality requires zsh version >= 4.1.*. +# To load vcs_info(), copy this file to your $fpath[] and do: +# % autoload -Uz vcs_info && vcs_info +# +# 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 +# :vcs_info:: +# ...where is one of: +# - git, git-svn, hg, darcs, bzr, mtn, svn, cvs or svk +# ...and is a freely configurable string, assignable +# by the user as the first argument to vcs_info(). +# +# There is one special value for named 'init', that +# is in effect as long as there was no decision what vcs backend to use. +# +# There are two pre-defined values for : +# default - the one used if none is specified +# command - used by vcs_info_lastmsg to lookup its styles. +# You may *not* use 'print_systems_' as a user-context string, +# because it is used internally. # -# You can of course use ':vcs_info:*' to match all VCSs at once. +# You can of course use ':vcs_info:*' to match all VCSs in all +# user-contexts 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. +# Another special context is 'formats', it is used by the +# vcs_info_lastmsg() utility function (see below). # -# 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; +# +# This is a description of all styles, that are looked up: +# format - Used in most circumstances. +# actionformat - 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, +# branchformat - Some backends replace %b in the format and +# actionformat 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 vcs_info() 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. +# use-prompt-escapes - determines if we assume that the assembled +# string from vcs_info() includes prompt escapes. +# (Used by vcs_info_lastmsg(). +# +# 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]-" +# format " (%s)-[%b|%a]-" +# actionformat " (%s)-[%b]-" +# branchformat "%b:%r" (for bzr, svn and svk) # enable true +# disable (empty list) +# use-simple false +# use-prompt-escapes true # -# In these formats, the following replacements are done: +# +# In format and actionformat, 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. +# Only makes sense in actionformat. # %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. +# In branchformat these replacements are done: +# %b - the branch name +# %r - the current revision number +# +# Not all vcs backends have to support all replacements. +# +# +# Function descriptions: +# vcs_info() +# The main function, that runs all backends and assembles +# all data into ${VCS_INFO_message_}. This is the function +# you want to call from precmd() if you want to include +# up-to-date information in your prompt (see Variable +# description, too if you are interested in this). +# +# vcs_info_printsys() +# Prints a list of all supported version control systems. +# Useful to find out possible contexts or values for the +# 'disable' style. +# +# vcs_info_lastmsg() +# Outputs the last ${VCS_INFO_message_} value. Takes into account +# the value of the use-prompt-escapes style in ':vcs_info:formats'. +# +# +# Variable description: +# ${VCS_INFO_message_} (Note the trailing underscore) +# This is the storage for the message the last vcs_info() +# call has assembled. +# +# +# Examples: +# Don't use vcs_info at all (even though it's in your prompt): +# % zstyle ':vcs_info:*' enable false +# +# Disable the backends for bzr and svk: +# % zstyle ':vcs_info:*' disable bzr svk # -# Example: PROMPT='%(?..[%?]-)%3~%$(vcs_info)#' +# Provide a special format for git: +# % zstyle ':vcs_info:*:git' format ' GIT, BABY! [%b]' +# % zstyle ':vcs_info:*:git' actionformat ' GIT ACTION! [%b|%a]' # -# This *requires* 'setopt prompt_subst'. +# 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 %{...%}, +# if you want to use the string provided by vcs_info() in prompts. +# +# Here is an example of how to include vcs_info in PS1 (*requires* +# 'setopt prompt_subst'): +# +# PS1='%(?..[%?]-)%3~%${VCS_INFO_message_}#' +# precmd () { vcs_info; } +# +# Here is how to print the vcs infomation as a command: +# alias vcsi='vcs_info command; vcs_info_lastmsg' +# +# This way, you can even define different formats for output via +# vcs_info_lastmsg() in the ':vcs_info:command:*' namespace. +# +# }}} +VCS_INFO_adjust () { #{{{ + [[ -n ${vcs_comm[overwrite_name]} ]] && vcs=${vcs_comm[overwrite_name]} + return 0 +} +# }}} +VCS_INFO_check_com () { #{{{ + (( ${+commands[$1]} )) && [[ -x ${commands[$1]} ]] && return 0 + return 1 +} +# }}} +VCS_INFO_format () { # {{{ + local msg + + if [[ -n ${1} ]] ; then + zstyle -s ":vcs_info:${usercontext}:${vcs}" actionformat msg + [[ -z ${msg} ]] && msg=' (%s)-[%b|%a]-' + else + zstyle -s ":vcs_info:${usercontext}:${vcs}" format msg + [[ -z ${msg} ]] && msg=' (%s)-[%b]-' + fi + printf '%s' ${msg} +} # }}} -VCS_INFO_default_action_format=' (%s)-[%b|%a]-' -VCS_INFO_default_format=' (%s)-[%b]-' VCS_INFO_realpath () { #{{{ # replacing 'readlink -f', which is really not portable. - (( ${+functions[chpwd]} )) && unfunction chpwd - setopt chaselinks - cd $1 2>/dev/null && pwd + # forcing a subshell, to ensure chpwd() is not removed + # from the calling shell (if VCS_INFO_realpath() is called + # manually). + ( + (( ${+functions[chpwd]} )) && unfunction chpwd + setopt chaselinks + cd $1 2>/dev/null && pwd + ) } # }}} VCS_INFO_git_getaction () { #{{{ @@ -1078,7 +1230,7 @@ VCS_INFO_git_getaction () { #{{{ else gitaction="am/rebase" fi - print '%s' ${gitaction} + printf '%s' ${gitaction} return 0 fi done @@ -1119,6 +1271,7 @@ VCS_INFO_git_getbranch () { #{{{ || [[ -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 @@ -1147,16 +1300,14 @@ 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 + 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}) @@ -1166,24 +1317,42 @@ 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 - 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}" 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=${1} - svkbranch=${svkbase##* - } - svkbase=${svkbase%% - *} + svkbase=${vcs_comm[basedir]} + + zstyle -s ":vcs_info:${usercontext}:${vcs}" branchformat svkbranch || svkbranch="%b:%r" + zformat -f svkbranch "${svkbranch}" "b:${vcs_comm[branch]}" "r:${vcs_comm[revision]}" msg=$(VCS_INFO_format) zformat -f msg "${msg}" "a:" "b:${svkbranch}" "s:${vcs}" "r:${svkbase:t}" "R:${svkbase}" @@ -1191,14 +1360,19 @@ VCS_INFO_svk_get_data () { # {{{ } # }}} VCS_INFO_svn_get_data () { # {{{ - local msg svnbranch svnbase + setopt localoptions noksharrays + local msg svnbase svnbranch + local -a svninfo 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 }') + svninfo=($(svn info "${svnbase}" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r"\n"$0 }')) + + zstyle -s ":vcs_info:${usercontext}:${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}" @@ -1206,107 +1380,229 @@ VCS_INFO_svn_get_data () { # {{{ } # }}} VCS_INFO_bzr_get_data () { # {{{ - local msg bzrbranch bzrbase bzrrevno i j + local msg bzrbranch bzrbase bzrrevno bzrbr i j + + if zstyle -t ":vcs_info:${usercontext}:${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 - bzrbase=$(bzr info | sed -rne 's, *branch root: ,,p') - case ${bzrbase} in - .) bzrbase=${PWD} ;; - esac + zstyle -s ":vcs_info:${usercontext}:${vcs}" branchformat bzrbr || bzrbr="%b:%r" + zformat -f bzrbr "${bzrbr}" "b:${bzrbranch}" "r:${bzrrevno}" - bzr version-info | while read i j; do - case "${i}" in - revno:) - bzrrevno=${j} ;; - branch-nick:) - bzrbranch=${j} ;; - esac + 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:${bzrbranch}:${bzrrevno}" "s:${vcs}" "r:${bzrbase:t}" "R:${bzrbase}" + 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 - [[ -d ".bzr" ]] && return 0 + VCS_INFO_check_com bzr || return 1 + vcs_comm[detect_need_file]=branch/format + VCS_INFO_detect_by_dir '.bzr' + return $? +} + +VCS_INFO_cvs_detect() { + VCS_INFO_check_com svn || return 1 + [[ -d "CVS" ]] && return 0 return 1 } +VCS_INFO_darcs_detect() { + VCS_INFO_check_com darcs || return 1 + vcs_comm[detect_need_file]=format + VCS_INFO_detect_by_dir '_darcs' + return $? +} + VCS_INFO_git_detect() { - check_com -c git && git rev-parse --is-inside-work-tree &> /dev/null && return 0 + if VCS_INFO_check_com 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 + VCS_INFO_check_com hg || return 1 + vcs_comm[detect_need_file]=branch + VCS_INFO_detect_by_dir '.hg' + return $? +} - printf '%s' $(VCS_INFO_realpath ${basedir}) - return 0 +VCS_INFO_mtn_detect() { + VCS_INFO_check_com mtn || return 1 + vcs_comm[detect_need_file]=revision + VCS_INFO_detect_by_dir '_MTN' + return $? } VCS_INFO_svk_detect() { - local output + setopt localoptions noksharrays + local -a info - check_com -c svk || return 1 + VCS_INFO_check_com 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 - - printf '%s' ${output} + info=( + $(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 "\n" $2; + exit 1 + }' ~/.svk/config + ) + ) && return 1 + + vcs_comm[basedir]=${info[1]} + vcs_comm[branch]=${info[2]} + vcs_comm[revision]=${info[3]} return 0 } VCS_INFO_svn_detect() { - check_com -c svn || return 1 + VCS_INFO_check_com svn || return 1 [[ -d ".svn" ]] && return 0 return 1 } # }}} -VCS_INFO_format () { # {{{ - local msg - - if [[ -n ${1} ]] ; then - zstyle -s ":vcs_info:${vcs}" promptactionformat msg - [[ -z ${msg} ]] && msg=${VCS_INFO_default_action_format} +vcs_info_printsys () { # {{{ + vcs_info print_systems_ +} +# }}} +vcs_info_lastmsg () { # {{{ + if zstyle -T ':vcs_info:command:formats' use-prompt-escapes ; then + print -P ${VCS_INFO_message_} else - zstyle -s ":vcs_info:${vcs}" promptformat msg - [[ -z ${msg} ]] && msg=${VCS_INFO_default_format} + print ${VCS_INFO_message_} fi - printf '%s' ${msg} } # }}} vcs_info () { # {{{ - local string output + setopt localoptions #xtrace + local string local -i found - local -a VCSs - local -x vcs + local -a VCSs disabled + local -x vcs usercontext + local -Ax vcs_comm + + VCSs=(git hg bzr darcs mtn svn cvs svk) + case ${1} in + (print_systems_) + print -l ${VCSs} + # and the special flavours + print -l '# flavours (cannot be used in the disable style; they' \ + '# are disabled with their master [git-svn -> git]):' \ + 'git-svn' + return 0 + ;; + ('') + [[ -t ${usercontext} ]] && usercontext=default + ;; + (*) [[ -t ${usercontext} ]] && usercontext=${1} + ;; + esac vcs="init" - zstyle -T ":vcs_info:${vcs}" "enable" || return 0 - - VCSs=(git hg bzr svn svk) + zstyle -T ":vcs_info:${usercontext}:${vcs}" "enable" || { + typeset -gx VCS_INFO_message_='' + return 0 + } + zstyle -a ":vcs_info:${usercontext}:${vcs}" "disable" disabled (( found = 0 )) for vcs in ${VCSs} ; do - output=$(VCS_INFO_${vcs}_detect) && (( found = 1 )) && break + [[ -n ${(M)disabled:#${vcs}} ]] && continue + vcs_comm=() + VCS_INFO_${vcs}_detect && (( found = 1 )) && break done - (( found == 0 )) && return 0 + (( found == 0 )) && { + typeset -gx VCS_INFO_message_='' + return 0 + } + + string=$(VCS_INFO_${vcs}_get_data) || { + typeset -gx VCS_INFO_message_='' + return 1 + } - string=$(VCS_INFO_${vcs}_get_data ${output}) || return 1 - printf '%s' ${string} + typeset -gx VCS_INFO_message_=${string} return 0 } + +typeset -gx VCS_INFO_message_='' # }}} # change vcs_info formats for the grml prompt @@ -1315,10 +1611,9 @@ if [[ "$TERM" == dumb ]] ; then 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}%} " + zstyle ':vcs_info:(sv[nk]|bzr)' branchformat "%b${YELLOW}:%r" fi # }}} @@ -1342,6 +1637,9 @@ is41 && setopt transient_rprompt is4 && [[ -z $NOPRECMD ]] && precmd () { [[ -n $NOPRECMD ]] && return 0 + # update VCS information + vcs_info + # allow manual overwriting of RPROMPT if [[ -n $RPROMPT ]] ; then [[ $TERM == screen* ]] && echo -n $'\ekzsh\e\\' @@ -1397,23 +1695,6 @@ preexec () { 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. @@ -1426,7 +1707,7 @@ fi # don't use colors on dumb terminals (like emacs): if [[ "$TERM" == dumb ]] ; then - PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< "'$(vcs_info)'"%# " + PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< "'${VCS_INFO_message_}'"%# " else # only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended prompt # set variable identifying the chroot you work in (used in the prompt below) @@ -1436,9 +1717,9 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " else # This assembles the primary prompt string if (( EUID != 0 )); then - PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "'$(vcs_info)'"%# " + PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "'${VCS_INFO_message_}'"%# " else - PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "'$(vcs_info)'"%# " + PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "'${VCS_INFO_message_}'"%# " fi fi fi @@ -1729,7 +2010,7 @@ fi # {{{ Use hard limits, except for a smaller stack and no core dumps unlimit -is4 && limit stack 8192 +is425 && limit stack 8192 isgrmlcd && limit core 0 # important for a live-cd-system limit -s # }}} @@ -2316,7 +2597,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 {{{