X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=24978759abde342e9aa4770ddd2b99e2efdfe4fa;hb=fe2215ca407bc882da966f7393e05d2c3fee5f75;hp=0f43289dfc8c8cf51bf80d3b38c55c7499600e99;hpb=afc9eb7f0d6ca2f62e44de902e4f675a21fa0dc5;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 0f43289..2497875 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' - [ -x $(which dircolors) ] && eval `dircolors -b` -# Search path for the cd command -# cdpath=(.. ~) + # color setup for ls: + [ -x $(type dircolors) ] && eval `dircolors -b` -# 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. + # 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. 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 && \ @@ -613,7 +633,7 @@ fi # {{{ display battery status on right side of prompt via running 'BATTERY=1 zsh' if [ -n "$BATTERY" ] ; then - if [ -x $(which acpi) ] ; then + if [ -x $(type acpi) ] ; then PERCENT="${(C)${(s| |)$(acpi 2>/dev/null)}[4]}" [ -z "$PERCENT" ] && PERCENT='acpi not present' if [ "${PERCENT%%%}" -lt 20 ] ; then @@ -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 @@ -854,7 +940,7 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " alias top10='print -l ? ${(o)history%% *} | uniq -c | sort -nr | head -n 10' # truecrypt; use e.g. via 'truec /dev/ice /mnt/ice' or 'truec -i' - if [ -x $(which truecrypt) ] ; then + if [ -x $(type truecrypt) ] ; then if isutfenv ; then alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077,utf8" ' else @@ -966,14 +1052,14 @@ Enjoy your grml system with the zsh!$reset_color" fi # sort installed Debian-packages by size - if [ -x $(which grep-status) ] ; then + if [ -x $(type grep-status) ] ; then #a3# List installed Debian-packages sorted by size alias debs-by-size='grep-status -FStatus -sInstalled-Size,Package -n "install ok installed" | paste -sd " \n" | sort -rn' fi # if cdrecord is a symlink (to wodim) or isn't present at all warn: - if [ -L /usr/bin/cdrecord -o ! -x $(which cdrecord) ] ; then - if [ -x $(which wodim) ] ; then + if [ -L /usr/bin/cdrecord -o ! -x $(type cdrecord) ] ; then + if [ -x $(type wodim) ] ; then alias cdrecord="echo 'cdrecord is not provided under its original name by Debian anymore. See #377109 in the BTS of Debian for more details. @@ -982,7 +1068,7 @@ Please use the wodim binary instead' ; return 1" fi # get_tw_cli has been renamed into get_3ware - if [ -x $(which get_3ware) ] ; then + if [ -x $(type get_3ware) ] ; then get_tw_cli() { echo 'Warning: get_tw_cli has been renamed into get_3ware. Invoking get_3ware for you.'>&2 get_3ware @@ -990,7 +1076,7 @@ Please use the wodim binary instead' ; return 1" fi # I hate lacking backward compatibility, so provide an alternative therefore - if ! [ -x $(which apache2-ssl-certificate) ] ; then + if ! [ -x $(type apache2-ssl-certificate) ] ; then apache2-ssl-certificate(){ print 'Debian does not ship apache2-ssl-certificate anymore (see #398520). :(' @@ -1180,19 +1266,19 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." fi } - if [ -x $(which 915resolution) ] ; then + if [ -x $(type 915resolution) ] ; then alias 855resolution='echo -e "Please use 915resolution as resolution modify tool for Intel graphic chipset."; return -1' fi #a1# Output version of running grml alias grml-version='cat /etc/grml_version' - if [ -x $(which rebuildfstab) ] ; then + if [ -x $(type rebuildfstab) ] ; then #a1# Rebuild /etc/fstab alias grml-rebuildfstab='rebuildfstab -v -r -config' fi - if [ -x $(which grml-debootstrap) ] ; then + if [ -x $(type grml-debootstrap) ] ; then alias debian2hd='print "Installing debian to harddisk is possible via using grml-debootstrap." ; return 1' fi } @@ -1266,7 +1352,7 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." # manzsh() { man zshall | $MYLESS -p $1 ; } fi - if [ -x $(which most) ] ; then + if [ -x $(type most) ] ; then #f1# View Debian's changelog of a given package dchange() { if [ -r /usr/share/doc/${1}/changelog.Debian.gz ] ; then @@ -1502,6 +1588,11 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." exec env -i ENV="/etc/minimal-shellrc" HOME="$HOME" TERM="$TERM" ksh } + # make a backup of a file + bk() { + cp -a "$1" "${1}_$(date --iso-8601=seconds)" + } + # Switching shell safely and efficiently? http://www.zsh.org/mla/workers/2001/msg02410.html # bash() { # NO_SWITCH="yes" command bash "$@"