X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=820b06406016de494d4677962d6c9c7932a03033;hb=cb4f982aba9993a99b791b3f8d97c57af3c721b3;hp=a13720a16c6a55d43732b214729c732e779f1c7e;hpb=0907a3a9b51ea8628c4970a26333fd7eee97f2c9;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index a13720a..820b064 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -3,7 +3,7 @@ # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Sam Sep 15 10:24:10 CEST 2007 [mika] +# Latest change: Don Nov 22 11:13:15 CET 2007 [mika] ################################################################################ # This file is sourced only for interactive shells. It # should contain commands to set up aliases, functions, @@ -136,6 +136,7 @@ # check for versions (compatibility reasons) if autoload is-at-least && is-at-least 2>/dev/null ; then is4() { is-at-least 4 } + is41() { is-at-least 4.1 } is42() { is-at-least 4.2 } else is4(){ @@ -230,19 +231,30 @@ # {{{ set some variables #v# - export EDITOR=${EDITOR:-vim} + if type -p vim &>/dev/null ; then + export EDITOR=${EDITOR:-vim} + else + export EDITOR=${EDITOR:-vi} + fi #v# + export MAIL=${MAIL:-/var/mail/$USER} + # if we don't set $SHELL then aterm, rxvt,.. will use /bin/sh or /bin/bash :-/ export SHELL='/bin/zsh' + + # color setup for ls: [ -x $(which dircolors) ] && eval `dircolors -b` -# Search path for the cd command -# cdpath=(.. ~) + # set width of man pages to 80 for more convenient reading + # (( ${+MANWIDTH} )) || export MANWIDTH=80 + + # Search path for the cd command + # cdpath=(.. ~) -# completion functions go to /etc/zsh/completion.d -# function files may be put into /etc/zsh/functions.d, from where they -# will be automatically autoloaded. + # completion functions go to /etc/zsh/completion.d + # function files may be put into /etc/zsh/functions.d, from where they + # will be automatically autoloaded. if [ -n "$BROKEN_COMPLETION_DIR" ] ; then print 'Warning: not setting completion directories because broken files have been found.'>&2 else @@ -255,7 +267,7 @@ fi fi -# automatically remove duplicates from these arrays + # automatically remove duplicates from these arrays typeset -U path cdpath fpath manpath # }}} @@ -450,12 +462,20 @@ fi done # autoload zsh modules when they are referenced - is4 && for opt mod in a stat \ - a zpty \ - ap zprof \ - ap mapfile ; do - zmodload -${opt} zsh/${mod} ${mod} - done ; unset opt mod + if is4 ; then + tmpargs=( + a stat + a zpty + ap zprof + ap mapfile + ) + + while (( ${#tmpargs} > 0 )) ; do + zmodload -${tmpargs[1]} zsh/${tmpargs[2]} ${tmpargs[2]} + shift 2 tmpargs + done + unset tmpargs + fi is4 && autoload -U insert-files && \ zle -N insert-files && \ @@ -623,6 +643,67 @@ fi fi # }}} +# display version control information on right side of prompt if $VCS is set {{{ +# based on Mike Hommey's http://web.glandium.org/blog/?p=170 + __vcs_dir() { + local vcs base_dir sub_dir ref + sub_dir() { + local sub_dir + sub_dir=$(readlink -f "${PWD}") + sub_dir=${sub_dir#$1} + echo ${sub_dir#/} + } + + git_dir() { + base_dir=$(git-rev-parse --show-cdup 2>/dev/null) || return 1 + base_dir=$(readlink -f "$base_dir/..") + sub_dir=$(git-rev-parse --show-prefix) + sub_dir=${sub_dir%/} + ref=$(git-symbolic-ref -q HEAD || git-name-rev --name-only HEAD 2>/dev/null) + ref=${ref#refs/heads/} + vcs="git" + } + + svn_dir() { + [ -d ".svn" ] || return 1 + base_dir="." + while [ -d "$base_dir/../.svn" ]; do base_dir="$base_dir/.."; done + base_dir=$(readlink -f "$base_dir") + sub_dir=$(sub_dir "${base_dir}") + ref=$(svn info "$base_dir" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r":"$0 }') + vcs="svn" + } + + svk_dir() { + [ -f ~/.svk/config ] || return 1 + base_dir=$(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 + ref=${base_dir##* + } + base_dir=${base_dir%% + *} + sub_dir=$(sub_dir "${base_dir}") + vcs="svk" + } + + hg_dir() { + base_dir="." + while [ ! -d "$base_dir/.hg" ]; do base_dir="$base_dir/.."; [ $(readlink -f "${base_dir}") = "/" ] && return 1; done + base_dir=$(readlink -f "$base_dir") + sub_dir=$(sub_dir "${base_dir}") + ref=$(< "${base_dir}/.hg/branch") + vcs="hg" + } + + hg_dir || + git_dir || + svn_dir || + svk_dir # || + # base_dir="$PWD" + # echo "${vcs:+($vcs)}${base_dir/$HOME/~}${vcs:+[$ref]${sub_dir}}" + echo "${vcs:+($vcs)}${base_dir}${vcs:+[$ref]${sub_dir}}" + } +# }}} + # {{{ set prompt if autoload promptinit && promptinit 2>/dev/null ; then promptinit # people should be able to use their favourite prompt @@ -630,26 +711,29 @@ fi print 'Notice: no promptinit available :(' fi + # precmd() => a function which is executed just before each prompt # use 'NOPRECMD=1' to disable the precmd + preexec commands # precmd () { setopt promptsubst; [[ -o interactive ]] && jobs -l; # make sure to use right prompt only when not running a command - is4 && setopt transient_rprompt + is41 && setopt transient_rprompt is4 && [[ -z $NOPRECMD ]] && precmd () { [[ -n $NOPRECMD ]] && return 0 # allow manual overwriting of RPROMPT if [[ -n $RPROMPT ]] ; then [[ $TERM == screen* ]] && echo -n $'\ekzsh\e\\' - return 0 + # return 0 fi # just use DONTSETRPROMPT=1 to be able to overwrite RPROMPT if [[ -z $DONTSETRPROMPT ]] ; then if [[ -n $BATTERY ]] ; then RPROMPT="%(?..:()% ${PERCENT}${SCREENTITLE}" # RPROMPT="${PERCENT}${SCREENTITLE}" + elif [[ -n $VCS ]] ; then + RPROMPT="%(?..:()% $(__vcs_dir)${SCREENTITLE}" else RPROMPT="%(?..:()% ${SCREENTITLE}" # RPROMPT="${SCREENTITLE}" @@ -809,7 +893,8 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " alias term2iso="echo 'Setting terminal to iso mode' ; print -n '\e%@'" alias term2utf="echo 'Setting terminal to utf-8 mode'; print -n '\e%G'" - type utf2iso &>/dev/null && unalias utf2iso # make sure it is not assigned yet + # make sure it is not assigned yet + [[ $(whence -w utf2iso &>/dev/null) == 'utf2iso: alias' ]] && unalias utf2iso utf2iso() { if isutfenv ; then for ENV in $(env | command grep -i '.utf') ; do @@ -818,7 +903,8 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " fi } - type iso2utf &>/dev/null && unalias iso2utf # make sure it is not assigned yet + # make sure it is not assigned yet + [[ $(whence -w iso2utf &>/dev/null) == 'iso2utf: alias' ]] && unalias iso2utf iso2utf() { if ! isutfenv ; then for ENV in $(env | command grep -i '\.iso') ; do