Applied patch bomb for unified indenting, thanks ft
authorMichael Prokop <mika@grml.org>
Thu, 6 Dec 2007 22:16:36 +0000 (23:16 +0100)
committerMichael Prokop <mika@grml.org>
Thu, 6 Dec 2007 22:16:36 +0000 (23:16 +0100)
debian/changelog
etc/skel/.zshrc
etc/skel/.zshrc.grmlsmall
etc/zsh/completion.d/_fbset
etc/zsh/functions.d/grml-wallpaper
etc/zsh/keephack
etc/zsh/zlogout
etc/zsh/zshenv
etc/zsh/zshrc

index 94b7688..bbd6476 100644 (file)
@@ -2,7 +2,7 @@ grml-etc-core (0.3.41) unstable; urgency=low
 
   [ Alexander Steinböck]
   * zsh: standarized the use of brackets - double instead of
-    single ones - for test situations like if-clauses.
+    single ones - for test situations like if-clauses [thanks!]
     [Testing: issue354]
 
   [ Michael Prokop ]
@@ -10,6 +10,7 @@ grml-etc-core (0.3.41) unstable; urgency=low
 
   [ Frank Terbeck ]
   * zsh: several small cleanups by ft [thanks!]
+  * zsh: patch bomb for unified indenting [thanks!]
 
  -- Michael Prokop <mika@grml.org>  Sun, 02 Dec 2007 19:54:45 +0100
 
index db9cc18..8196337 100644 (file)
 # see /etc/zsh/zshrc for some general settings
 # If you don't have write permissions to /etc/zsh/zshrc on your own
 # copy the file to your $HOME as /.zshrc.global and we source it:
-  if [[ -r ~/.zshrc.global ]] ; then
-     . ~/.zshrc.global
-  fi
+xsource "${HOME}/.zshrc.global"
 # }}}
 
 # check whether global file has been read {{{
-  if [[ -z "$ZSHRC_GLOBAL_HAS_BEEN_READ" ]] ; then
-     print 'Warning: global zsh config has not been read'>&2
-  fi
+if [[ -z "$ZSHRC_GLOBAL_HAS_BEEN_READ" ]] ; then
+    print 'Warning: global zsh config has not been read'>&2
+fi
 # }}}
 
 # autoloading stuff {{{
 # associate types and extensions (be aware with perl scripts and anwanted behaviour!)
-#  type zsh-mime-setup &>/dev/null || { autoload zsh-mime-setup && zsh-mime-setup }
+#  check_com zsh-mime-setup || { autoload zsh-mime-setup && zsh-mime-setup }
 #  alias -s pl='perl -S'
 # }}}
 
 # completion system {{{
 # just make sure it is loaded in this file too
-  type compinit &>/dev/null || { autoload -U compinit && compinit }
+check_com compinit || { autoload -U compinit && compinit }
 # }}}
 
 # make sure isgrmlsmall is defined {{{
-  type isgrmlsmall &>/dev/null || function isgrmlsmall () { return 1 }
+check_com isgrmlsmall || function isgrmlsmall () { return 1 }
 # }}}
 
 ## variables {{{
 
 # do you want grmlsmall-specific adjustments?
-  GRMLSMALL_SPECIFIC=1
+GRMLSMALL_SPECIFIC=1
 
 # set terminal property (used e.g. by msgid-chooser)
-  export COLORTERM="yes"
+export COLORTERM="yes"
 
 # set default browser
-  if [[ -z "$BROWSER" ]] ; then
-     if [[ -n "$DISPLAY" ]] ; then
+if [[ -z "$BROWSER" ]] ; then
+    if [[ -n "$DISPLAY" ]] ; then
         #v# If X11 is running
-        [[ -x $(type firefox) ]] && export BROWSER=firefox
-     else
+        check_com -c firefox && export BROWSER=firefox
+    else
         #v# If no X11 is running
-        [[ -x $(type w3m) ]] && export BROWSER=w3m
-     fi
-  fi
-  #v#
-  (( ${+PAGER} ))   || export PAGER="less"
+        check_com -c w3m && export BROWSER=w3m
+    fi
+fi
+#v#
+(( ${+PAGER} )) || export PAGER="less"
 
-# export qtdir
-  #m# v QTDIR \kbd{/usr/share/qt[34]}\quad [for non-root only]
-  [[ -d /usr/share/qt3 ]] && export QTDIR=/usr/share/qt3
-  [[ -d /usr/share/qt4 ]] && export QTDIR=/usr/share/qt4
+#m# v QTDIR \kbd{/usr/share/qt[34]}\quad [for non-root only]
+[[ -d /usr/share/qt3 ]] && export QTDIR=/usr/share/qt3
+[[ -d /usr/share/qt4 ]] && export QTDIR=/usr/share/qt4
 
 # support running 'jikes *.java && jamvm HelloWorld' OOTB:
-  #v# [for non-root only]
-  [[ -f /usr/share/classpath/glibj.zip ]] && export JIKESPATH=/usr/share/classpath/glibj.zip
+#v# [for non-root only]
+[[ -f /usr/share/classpath/glibj.zip ]] && export JIKESPATH=/usr/share/classpath/glibj.zip
 # }}}
 
 ## set options {{{
 
 # Xterm resizing-fu.
 # Based on http://svn.kitenet.net/trunk/home-full/.zshrc?rev=11710&view=log (by Joey Hess)
-  alias hide='echo -en "\033]50;nil2\007"'
-  alias tiny='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-80-*-*-c-*-iso8859-15\007"'
-  alias small='echo -en "\033]50;6x10\007"'
-  alias medium='echo -en "\033]50;-misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-15\007"'
-  alias default='echo -e "\033]50;-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-15\007"'
-  alias large='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso8859-15\007"'
-  alias huge='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15\007"'
-  alias smartfont='echo -en "\033]50;-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*\007"'
-  alias semifont='echo -en "\033]50;-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15\007"'
+alias hide='echo -en "\033]50;nil2\007"'
+alias tiny='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-80-*-*-c-*-iso8859-15\007"'
+alias small='echo -en "\033]50;6x10\007"'
+alias medium='echo -en "\033]50;-misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-15\007"'
+alias default='echo -e "\033]50;-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-15\007"'
+alias large='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso8859-15\007"'
+alias huge='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15\007"'
+alias smartfont='echo -en "\033]50;-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*\007"'
+alias semifont='echo -en "\033]50;-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15\007"'
 #  if [[ "$TERM" == "xterm" ]] && [[ "$LINES" -ge 50 ]] && [[ "$COLUMNS" -ge 100 ]] && [[ -z "$SSH_CONNECTION" ]] ; then
 #          large
 #  fi
 
 # general
-  #a2# Execute \kbd{du -sch}
-  alias da='du -sch'
-  #a2# Execute \kbd{jobs -l}
-  alias j='jobs -l'
+#a2# Execute \kbd{du -sch}
+alias da='du -sch'
+#a2# Execute \kbd{jobs -l}
+alias j='jobs -l'
 #  alias u='translate -i'          # translate
 
 # compile stuff
-  #a2# Execute \kbd{./configure}
-  alias CO="./configure"
-  #a2# Execute \kbd{./configure --help}
-  alias CH="./configure --help"
+#a2# Execute \kbd{./configure}
+alias CO="./configure"
+#a2# Execute \kbd{./configure --help}
+alias CH="./configure --help"
 
 # http://conkeror.mozdev.org/
-  #a2# Run a keyboard driven firefox
-  alias conkeror='firefox -chrome chrome://conkeror/content'
+#a2# Run a keyboard driven firefox
+alias conkeror='firefox -chrome chrome://conkeror/content'
 
 # arch/tla stuff
-  if type -p tla &>/dev/null ; then
-     #a2# Execute \kbd{tla what-changed --diffs | less}
-     alias tdi='tla what-changed --diffs | less'
-     #a2# Execute \kbd{tla-buildpackage}
-     alias tbp='tla-buildpackage'
-     #a2# Execute \kbd{tla archive-mirror}
-     alias tmi='tla archive-mirror'
-     #a2# Execute \kbd{tla commit}
-     alias tco='tla commit'
-     #a2# Execute \kbd{tla star-merge}
-     alias tme='tla star-merge'
-  fi
+if check_com -c tla ; then
+    #a2# Execute \kbd{tla what-changed --diffs | less}
+    alias tdi='tla what-changed --diffs | less'
+    #a2# Execute \kbd{tla-buildpackage}
+    alias tbp='tla-buildpackage'
+    #a2# Execute \kbd{tla archive-mirror}
+    alias tmi='tla archive-mirror'
+    #a2# Execute \kbd{tla commit}
+    alias tco='tla commit'
+    #a2# Execute \kbd{tla star-merge}
+    alias tme='tla star-merge'
+fi
 
 # listing stuff
-  #a2# Execute \kbd{ls -lSrah}
-  alias dir="ls -lSrah"
-  #a2# Only show dot-directories
-  alias lad='ls -d .*(/)'                # only show dot-directories
-  #a2# Only show dot-files
-  alias lsa='ls -a .*(.)'                # only show dot-files
-  #a2# Only files with setgid/setuid/sticky flag
-  alias lss='ls -l *(s,S,t)'             # only files with setgid/setuid/sticky flag
-  #a2# Only show 1st ten symlinks
-  alias lsl='ls -l *(@[1,10])'           # only symlinks
-  #a2# Display only executables
-  alias lsx='ls -l *(*[1,10])'           # only executables
-  #a2# Display world-{readable,writable,executable} files
-  alias lsw='ls -ld *(R,W,X.^ND/)'       # world-{readable,writable,executable} files
-  #a2# Display the ten biggest files
-  alias lsbig="ls -flh *(.OL[1,10])"     # display the biggest files
-  #a2# Only show directories
-  alias lsd='ls -d *(/)'                 # only show directories
-  #a2# Only show empty directories
-  alias lse='ls -d *(/^F)'               # only show empty directories
-  #a2# Display the ten newest files
-  alias lsnew="ls -rl *(D.om[1,10])"     # display the newest files
-  #a2# Display the ten oldest files
-  alias lsold="ls -rtlh *(D.om[1,10])"   # display the oldest files
-  #a2# Display the ten smallest files
-  alias lssmall="ls -Srl *(.oL[1,10])"   # display the smallest files
+#a2# Execute \kbd{ls -lSrah}
+alias dir="ls -lSrah"
+#a2# Only show dot-directories
+alias lad='ls -d .*(/)'                # only show dot-directories
+#a2# Only show dot-files
+alias lsa='ls -a .*(.)'                # only show dot-files
+#a2# Only files with setgid/setuid/sticky flag
+alias lss='ls -l *(s,S,t)'             # only files with setgid/setuid/sticky flag
+#a2# Only show 1st ten symlinks
+alias lsl='ls -l *(@[1,10])'           # only symlinks
+#a2# Display only executables
+alias lsx='ls -l *(*[1,10])'           # only executables
+#a2# Display world-{readable,writable,executable} files
+alias lsw='ls -ld *(R,W,X.^ND/)'       # world-{readable,writable,executable} files
+#a2# Display the ten biggest files
+alias lsbig="ls -flh *(.OL[1,10])"     # display the biggest files
+#a2# Only show directories
+alias lsd='ls -d *(/)'                 # only show directories
+#a2# Only show empty directories
+alias lse='ls -d *(/^F)'               # only show empty directories
+#a2# Display the ten newest files
+alias lsnew="ls -rl *(D.om[1,10])"     # display the newest files
+#a2# Display the ten oldest files
+alias lsold="ls -rtlh *(D.om[1,10])"   # display the oldest files
+#a2# Display the ten smallest files
+alias lssmall="ls -Srl *(.oL[1,10])"   # display the smallest files
 
 # chmod
-  #a2# Execute \kbd{chmod 600}
-  alias rw-='chmod 600'
-  #a2# Execute \kbd{chmod 700}
-  alias rwx='chmod 700'
-  #m# a2 r-{}- Execute \kbd{chmod 644}
-  alias r--='chmod 644'
-  #a2# Execute \kbd{chmod 755}
-  alias r-x='chmod 755'
+#a2# Execute \kbd{chmod 600}
+alias rw-='chmod 600'
+#a2# Execute \kbd{chmod 700}
+alias rwx='chmod 700'
+#m# a2 r-{}- Execute \kbd{chmod 644}
+alias r--='chmod 644'
+#a2# Execute \kbd{chmod 755}
+alias r-x='chmod 755'
 
 # some useful aliases
-  #a2# Execute \kbd{mkdir -o}
-  alias md='mkdir -p'
+#a2# Execute \kbd{mkdir -o}
+alias md='mkdir -p'
 
-  [[ -x $(type ipython) ]] && alias ips='ipython -p sh'
+check_com -c ipython && alias ips='ipython -p sh'
 
 # console stuff
-  #a2# Execute \kbd{mplayer -vo fbdev}
-  alias cmplayer='mplayer -vo fbdev'
-  #a2# Execute \kbd{mplayer -vo fbdev -fs -zoom}
-  alias fbmplayer='mplayer -vo fbdev -fs -zoom'
-  #a2# Execute \kbd{links2 -driver fb}
-  alias fblinks='links2 -driver fb'
+#a2# Execute \kbd{mplayer -vo fbdev}
+alias cmplayer='mplayer -vo fbdev'
+#a2# Execute \kbd{mplayer -vo fbdev -fs -zoom}
+alias fbmplayer='mplayer -vo fbdev -fs -zoom'
+#a2# Execute \kbd{links2 -driver fb}
+alias fblinks='links2 -driver fb'
 
 # ignore ~/.ssh/known_hosts entries
 #  alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "PreferredAuthentications=keyboard-interactive"'
-  #a2# ssh with StrictHostKeyChecking=no \\&\quad and UserKnownHostsFile unset
-  alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
-  alias insecscp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
+#a2# ssh with StrictHostKeyChecking=no \\&\quad and UserKnownHostsFile unset
+alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
+alias insecscp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
 
 # Use 'g' instead of 'git':
-  type g &>/dev/null || alias g='git'
+check_com g || alias g='git'
 
 # use colors when browsing man pages, but only if not using LESS_TERMCAP_* from /etc/zsh/zshenv:
-  if [[ -z "$LESS_TERMCAP_md" ]] ; then
-     [[ -d ~/.terminfo/ ]] && alias man='TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man'
-  fi
+if [[ -z "$LESS_TERMCAP_md" ]] ; then
+    [[ -d ~/.terminfo/ ]] && alias man='TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man'
+fi
 
 # check whether Debian's package management (dpkg) is running
-  if type salias &>/dev/null ; then
+if check_com salias ; then
     #a2# Check whether a dpkg instance is currently running
     salias check_dpkg_running="dpkg_running"
-  fi
+fi
 
 # work around non utf8 capable software in utf environment via $LANG and luit
-  if type isutfenv &>/dev/null && type luit &>/dev/null; then
-     if [[ -x $(type mrxvt) ]] ; then
-        isutfenv && [[ -n "$LANG" ]] && alias mrxvt="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} luit mrxvt"
-     fi
-
-     if [[ -x $(type aterm) ]] ; then
-        isutfenv && [[ -n "$LANG" ]] && alias aterm="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} luit aterm"
-     fi
-
-     if [[ -x $(type centericq) ]] ; then
-        isutfenv && [[ -n "$LANG" ]] && alias centericq="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} luit centericq"
-     fi
-  fi
+if check_com isutfenv && check_com luit ; then
+    if check_com -c mrxvt ; then
+        isutfenv && [[ -n "$LANG" ]] && \
+            alias mrxvt="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} luit mrxvt"
+    fi
+
+    if check_com -c aterm ; then
+        isutfenv && [[ -n "$LANG" ]] && \
+            alias aterm="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} luit aterm"
+    fi
+
+    if check_com -c centericq ; then
+        isutfenv && [[ -n "$LANG" ]] && \
+            alias centericq="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} luit centericq"
+    fi
+fi
 # }}}
 
 ## useful functions {{{
 
 # searching
-  #f4# Search for newspostings from authors
-  agoogle() { ${=BROWSER} "http://groups.google.com/groups?as_uauthors=$*" ; }
-  #f4# Search Debian Bug Tracking System by BugID in mbox format
-  debbug()  { ${=BROWSER} "http://bugs.debian.org/$*" }
-  #f4# Search Debian Bug Tracking System
-  debbugm() { bts show --mbox $1 } # provide bugnummer as "$1"
-  #f4# Search DMOZ
-  dmoz()    { ${=BROWSER} http://search.dmoz.org/cgi-bin/search\?search=${1// /_} }
-  #f4# Search German   Wiktionary
-  dwicti()  { ${=BROWSER} http://de.wiktionary.org/wiki/${(C)1// /_} }
-  #f4# Search English  Wiktionary
-  ewicti()  { ${=BROWSER} http://en.wiktionary.org/wiki/${(C)1// /_} }
-  #f4# Search Google Groups
-  ggogle()  { ${=BROWSER} "http://groups.google.com/groups?q=$*" }
-  #f4# Search Google
-  google()  { ${=BROWSER} "http://www.google.com/search?&num=100&q=$*" }
-  #f4# Search Google Groups for MsgID
-  mggogle() { ${=BROWSER} "http://groups.google.com/groups?selm=$*" }
-  #f4# Search Netcraft
-  netcraft(){ ${=BROWSER} "http://toolbar.netcraft.com/site_report?url=$1" }
-  #f4# Use German Wikipedia's full text search
-  swiki()   { ${=BROWSER} http://de.wikipedia.org/wiki/Spezial:Search/${(C)1} }
-  #f4# search \kbd{dict.leo.org}
-  oleo()    { ${=BROWSER} "http://dict.leo.org/?search=$*" }
-  #f4# Search German   Wikipedia
-  wikide () { ${=BROWSER} http://de.wikipedia.org/wiki/"${(C)*}" }
-  #f4# Search English  Wikipedia
-  wikien()  { ${=BROWSER} http://en.wikipedia.org/wiki/"${(C)*}" }
-  #f4# Search official debs
-  wodeb ()  { ${=BROWSER} "http://packages.debian.org/search?keywords=$1&searchon=contents&suite=${2:=unstable}&section=all" }
-
-  #m# f4 gex() Exact search via Google
-  which google &>/dev/null && gex () { google "\"[ $1]\" $*" } # exact search at google
+#f4# Search for newspostings from authors
+agoogle() { ${=BROWSER} "http://groups.google.com/groups?as_uauthors=$*" ; }
+#f4# Search Debian Bug Tracking System by BugID in mbox format
+debbug()  { ${=BROWSER} "http://bugs.debian.org/$*" }
+#f4# Search Debian Bug Tracking System
+debbugm() { bts show --mbox $1 } # provide bugnummer as "$1"
+#f4# Search DMOZ
+dmoz()    { ${=BROWSER} http://search.dmoz.org/cgi-bin/search\?search=${1// /_} }
+#f4# Search German   Wiktionary
+dwicti()  { ${=BROWSER} http://de.wiktionary.org/wiki/${(C)1// /_} }
+#f4# Search English  Wiktionary
+ewicti()  { ${=BROWSER} http://en.wiktionary.org/wiki/${(C)1// /_} }
+#f4# Search Google Groups
+ggogle()  { ${=BROWSER} "http://groups.google.com/groups?q=$*" }
+#f4# Search Google
+google()  { ${=BROWSER} "http://www.google.com/search?&num=100&q=$*" }
+#f4# Search Google Groups for MsgID
+mggogle() { ${=BROWSER} "http://groups.google.com/groups?selm=$*" }
+#f4# Search Netcraft
+netcraft(){ ${=BROWSER} "http://toolbar.netcraft.com/site_report?url=$1" }
+#f4# Use German Wikipedia's full text search
+swiki()   { ${=BROWSER} http://de.wikipedia.org/wiki/Spezial:Search/${(C)1} }
+#f4# search \kbd{dict.leo.org}
+oleo()    { ${=BROWSER} "http://dict.leo.org/?search=$*" }
+#f4# Search German   Wikipedia
+wikide()  { ${=BROWSER} http://de.wikipedia.org/wiki/"${(C)*}" }
+#f4# Search English  Wikipedia
+wikien()  { ${=BROWSER} http://en.wikipedia.org/wiki/"${(C)*}" }
+#f4# Search official debs
+wodeb()   { ${=BROWSER} "http://packages.debian.org/search?keywords=$1&searchon=contents&suite=${2:=unstable}&section=all" }
+
+#m# f4 gex() Exact search via Google
+check_com google && gex () { google "\"[ $1]\" $*" } # exact search at google
 
 # misc
-  #f5# Backup \kbd{file {\rm to} file\_timestamp}
-  bk()      { cp -b ${1} ${1}_`date --iso-8601=m` }
-  #f5# Copied diff
-  cdiff()   { diff -crd "$*" | egrep -v "^Only in |^Binary files " }
-  #f5# cd to directoy and list files
-  cl()      { cd $1 && ls -a }        # cd && ls
-  #f5# Cvs add
-  cvsa()    { cvs add $* && cvs com -m 'initial checkin' $* }
-  #f5# Cvs diff
-  cvsd()    { cvs diff -N $* |& $PAGER }
-  #f5# Cvs log
-  cvsl()    { cvs log $* |& $PAGER }
-  #f5# Cvs update
-  cvsq()    { cvs -nq update }
-  #f5# Rcs2log
-  cvsr()    { rcs2log $* | $PAGER }
-  #f5# Cvs status
-  cvss()    { cvs status -v $* }
-  #f5# Disassemble source files using gcc and as
-  disassemble(){ gcc -pipe -S -o - -O -g $* | as -aldh -o /dev/null }
-  #f5# Firefox remote control - open given URL
-  fir()     { firefox -a firefox -remote "openURL($1)" }
-  #f5# Create Directoy and \kbd{cd} to it
-  mcd()     { mkdir -p "$@"; cd "$@" } # mkdir && cd
-  #f5# Unified diff to timestamped outputfile
-  mdiff()   { diff -udrP "$1" "$2" > diff.`date "+%Y-%m-%d"`."$1" }
-  #f5# Memory overview
-  memusage(){ ps aux | awk '{if (NR > 1) print $5; if (NR > 2) print "+"} END { print "p" }' | dc }
-  #f5# Show contents of tar file
-  shtar()   { gunzip -c $1 | tar -tf - -- | $PAGER }
-  #f5# Show contents of tgz file
-  shtgz()   { tar -ztf $1 | $PAGER }
-  #f5# Show contents of zip file
-  shzip()   { unzip -l $1 | $PAGER }
-  #f5# Greps signature from file
-  sig()     { agrep -d '^-- $' "$*" ~/.Signature }
-  #f5# Unified diff
-  udiff()   { diff -urd $* | egrep -v "^Only in |^Binary files " }
-  #f5# (Mis)use \kbd{vim} as \kbd{less}
-  viless()  { vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}" }
-
-  # download video from youtube
-  ytdl() {
+#f5# Backup \kbd{file {\rm to} file\_timestamp}
+bk()      { cp -b ${1} ${1}_`date --iso-8601=m` }
+#f5# Copied diff
+cdiff()   { diff -crd "$*" | egrep -v "^Only in |^Binary files " }
+#f5# cd to directoy and list files
+cl()      { cd $1 && ls -a }        # cd && ls
+#f5# Cvs add
+cvsa()    { cvs add $* && cvs com -m 'initial checkin' $* }
+#f5# Cvs diff
+cvsd()    { cvs diff -N $* |& $PAGER }
+#f5# Cvs log
+cvsl()    { cvs log $* |& $PAGER }
+#f5# Cvs update
+cvsq()    { cvs -nq update }
+#f5# Rcs2log
+cvsr()    { rcs2log $* | $PAGER }
+#f5# Cvs status
+cvss()    { cvs status -v $* }
+#f5# Disassemble source files using gcc and as
+disassemble(){ gcc -pipe -S -o - -O -g $* | as -aldh -o /dev/null }
+#f5# Firefox remote control - open given URL
+fir()     { firefox -a firefox -remote "openURL($1)" }
+#f5# Create Directoy and \kbd{cd} to it
+mcd()     { mkdir -p "$@"; cd "$@" } # mkdir && cd
+#f5# Unified diff to timestamped outputfile
+mdiff()   { diff -udrP "$1" "$2" > diff.`date "+%Y-%m-%d"`."$1" }
+#f5# Memory overview
+memusage(){ ps aux | awk '{if (NR > 1) print $5; if (NR > 2) print "+"} END { print "p" }' | dc }
+#f5# Show contents of tar file
+shtar()   { gunzip -c $1 | tar -tf - -- | $PAGER }
+#f5# Show contents of tgz file
+shtgz()   { tar -ztf $1 | $PAGER }
+#f5# Show contents of zip file
+shzip()   { unzip -l $1 | $PAGER }
+#f5# Greps signature from file
+sig()     { agrep -d '^-- $' "$*" ~/.Signature }
+#f5# Unified diff
+udiff()   { diff -urd $* | egrep -v "^Only in |^Binary files " }
+#f5# (Mis)use \kbd{vim} as \kbd{less}
+viless()  { vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}" }
+
+# download video from youtube
+ytdl() {
     if ! [[ -n "$2" ]] ; then
-       print "Usage: ydtl http://youtube.com/watch?v=.... outputfile.flv">&2
-       return 1
+        print "Usage: ydtl http://youtube.com/watch?v=.... outputfile.flv">&2
+        return 1
     else
-       wget -O${2} "http://youtube.com/get_video?"${${${"$(wget -o/dev/null -O- "${1}" | grep -e watch_fullscreen)"}##*watch_fullscreen\?}%%\&fs=*}
+        wget -O${2} "http://youtube.com/get_video?"${${${"$(wget -o/dev/null -O- "${1}" | grep -e watch_fullscreen)"}##*watch_fullscreen\?}%%\&fs=*}
     fi
-  }
+}
 
 
 # Function Usage: doc packagename
-  #f5# \kbd{cd} to /usr/share/doc/\textit{package}
-  doc() { cd /usr/share/doc/$1 && ls }
-  _doc() { _files -W /usr/share/doc -/ }
-  type compdef &>/dev/null && compdef _doc doc
+#f5# \kbd{cd} to /usr/share/doc/\textit{package}
+doc() { cd /usr/share/doc/$1 && ls }
+_doc() { _files -W /usr/share/doc -/ }
+check_com compdef && compdef _doc doc
 
 #f5# Make screenshot
-  sshot() {
-        [[ ! -d ~/shots  ]] && mkdir ~/shots
-        #cd ~/shots ; sleep 5 ; import -window root -depth 8 -quality 80 `date "+%Y-%m-%d--%H:%M:%S"`.png
-        cd ~/shots ; sleep 5; import -window root shot_`date --iso-8601=m`.jpg
-  }
+sshot() {
+    [[ ! -d ~/shots  ]] && mkdir ~/shots
+    #cd ~/shots ; sleep 5 ; import -window root -depth 8 -quality 80 `date "+%Y-%m-%d--%H:%M:%S"`.png
+    cd ~/shots ; sleep 5; import -window root shot_`date --iso-8601=m`.jpg
+}
 
 # list images only
-  limg() {
+limg() {
     local -a images
     images=( *.{jpg,gif,png}(.N) )
+
     if [[ $#images -eq 0 ]] ; then
-      print "No image files found"
+        print "No image files found"
     else
-      ls "$@" "$images[@]"
+        ls "$@" "$images[@]"
     fi
-  }
+}
 
 #f5# Create PDF file from source code
-  makereadable() {
-     output=$1
-     shift
-     a2ps --medium A4dj -E -o $output $*
-     ps2pdf $output
-  }
+makereadable() {
+    output=$1
+    shift
+    a2ps --medium A4dj -E -o $output $*
+    ps2pdf $output
+}
 
 # zsh with perl-regex - use it e.g. via:
 # regcheck '\s\d\.\d{3}\.\d{3} Euro' ' 1.000.000 Euro'
 #f5# Checks whether a regex matches or not.\\&\quad Example: \kbd{regcheck '.\{3\} EUR' '500 EUR'}
-  regcheck() {
+regcheck() {
     zmodload -i zsh/pcre
     pcre_compile $1 && \
     pcre_match $2 && echo "regex matches" || echo "regex does not match"
-  }
+}
 
 #f5# List files which have been modified within the last {\it n} days
-  new() { print -l *(m-$1) }
+new() { print -l *(m-$1) }
 
 #f5# Grep in history
-  greph () { history 0 | grep $1 }
-  # use colors when GNU grep with color-support
-  #a2# Execute \kbd{grep -{}-color=auto}
-  (grep --help 2>/dev/null |grep -- --color) >/dev/null && alias grep='grep --color=auto'
-  #a2# Execute \kbd{grep -i -{}-color=auto}
-  alias GREP='grep -i --color=auto'
+greph() { history 0 | grep $1 }
+# use colors when GNU grep with color-support
+#a2# Execute \kbd{grep -{}-color=auto}
+(grep --help 2>/dev/null |grep -- --color) >/dev/null && alias grep='grep --color=auto'
+#a2# Execute \kbd{grep -i -{}-color=auto}
+alias GREP='grep -i --color=auto'
 
 # one blank line between each line
-  if [[ -r ~/.terminfo/m/mostlike ]] ; then
-#     alias man2='MANPAGER="sed -e G |less" TERMINFO=~/.terminfo TERM=mostlike /usr/bin/man'
-     #f5# Watch manpages in a stretched style
-     man2() { PAGER='dash -c "sed G | /usr/bin/less"' TERM=mostlike /usr/bin/man "$@" ; }
-  fi
-
-# jump between directories
-# Copyright 2005 Nikolai Weibull <nikolai@bitwi.se>
+if [[ -r ~/.terminfo/m/mostlike ]] ; then
+#   alias man2='MANPAGER="sed -e G |less" TERMINFO=~/.terminfo TERM=mostlike /usr/bin/man'
+    #f5# Watch manpages in a stretched style
+    man2() { PAGER='dash -c "sed G | /usr/bin/less"' TERM=mostlike /usr/bin/man "$@" ; }
+fi
+
+# d():Copyright 2005 Nikolai Weibull <nikolai@bitwi.se>
 # notice: option AUTO_PUSHD has to be set
-  #f5# Jump between directories
-  d(){
+#f5# Jump between directories
+d() {
     emulate -L zsh
     autoload -U colors
     local color=$fg_bold[blue]
     integer i=0
     dirs -p | while read dir; do
-      local num="${$(printf "%-4d " $i)/ /.}"
-      printf " %s  $color%s$reset_color\n" $num $dir
-      (( i++ ))
+        local num="${$(printf "%-4d " $i)/ /.}"
+        printf " %s  $color%s$reset_color\n" $num $dir
+        (( i++ ))
     done
     integer dir=-1
     read -r 'dir?Jump to directory: ' || return
     (( dir == -1 )) && return
     if (( dir < 0 || dir >= i )); then
-      echo d: no such directory stack entry: $dir
-      return 1
+        echo d: no such directory stack entry: $dir
+        return 1
     fi
     cd ~$dir
-  }
+}
 
 # usage example: 'lcheck strcpy'
 #f5# Find out which libs define a symbol
-  lcheck() {
-     if [[ -n "$1" ]] ; then
+lcheck() {
+    if [[ -n "$1" ]] ; then
         nm -go /usr/lib/lib*.a 2>/dev/null | grep ":[[:xdigit:]]\{8\} . .*$1"
-      else
+    else
         echo "Usage: lcheck <function>" >&2
-     fi
-  }
+    fi
+}
 
 #f5# Clean up directory - remove well known tempfiles
-  purge() {
-        FILES=(*~(N) .*~(N) \#*\#(N) *.o(N) a.out(N) *.core(N) *.cmo(N) *.cmi(N) .*.swp(N))
-        NBFILES=${#FILES}
-        if [[ $NBFILES > 0 ]] ; then
-                print $FILES
-                local ans
-                echo -n "Remove these files? [y/n] "
-                read -q ans
-                if [[ $ans == "y" ]] ; then
-                        rm ${FILES}
-                        echo ">> $PWD purged, $NBFILES files removed"
-                else
-                        echo "Ok. .. than not.."
-                fi
+purge() {
+    FILES=(*~(N) .*~(N) \#*\#(N) *.o(N) a.out(N) *.core(N) *.cmo(N) *.cmi(N) .*.swp(N))
+    NBFILES=${#FILES}
+    if [[ $NBFILES > 0 ]] ; then
+        print $FILES
+        local ans
+        echo -n "Remove these files? [y/n] "
+        read -q ans
+        if [[ $ans == "y" ]] ; then
+            rm ${FILES}
+            echo ">> $PWD purged, $NBFILES files removed"
+        else
+            echo "Ok. .. than not.."
         fi
-   }
+    fi
+}
 
 # Translate DE<=>EN
 # 'translate' looks up fot a word in a file with language-to-language
 #  $ awk -F ':' '{ print $2" : "$1" "$3 }' \
 #    /usr/local/lib/words/en-de.ISO-8859-1.vok > ~/.translate/de-en.ISO-8859-1.vok
 #f5# Translates a word
-  trans() {
-        case "$1" in
-                -[dD]*) translate -l de-en $2
-                ;;
-                -[eE]*) translate -l en-de $2
-                ;;
-                *)
-                echo "Usage: $0 { -D | -E }"
-                echo "         -D == German to English"
-                echo "         -E == English to German"
-        esac
-  }
+trans() {
+    case "$1" in
+        -[dD]*)
+            translate -l de-en $2
+            ;;
+        -[eE]*)
+            translate -l en-de $2
+            ;;
+        *)
+            echo "Usage: $0 { -D | -E }"
+            echo "         -D == German to English"
+            echo "         -E == English to German"
+    esac
+}
 
 # Some quick Perl-hacks aka /useful/ oneliner
 #  bew() { perl -le 'print unpack "B*","'$1'"' }
 #  vimhelp ()    { vim -c "help $1" -c on -c "au! VimEnter *" }
 
 #f5# List all occurrences of programm in current PATH
-  plap() {
-        if [[ $# = 0 ]] ; then
-                echo "Usage:    $0 program"
-                echo "Example:  $0 zsh"
-                echo "Lists all occurrences of program in the current PATH."
-        else
-                ls -l ${^path}/*$1*(*N)
-        fi
-  }
+plap() {
+    if [[ $# = 0 ]] ; then
+        echo "Usage:    $0 program"
+        echo "Example:  $0 zsh"
+        echo "Lists all occurrences of program in the current PATH."
+    else
+        ls -l ${^path}/*$1*(*N)
+    fi
+}
 
 # Found in the mailinglistarchive from Zsh (IIRC ~1996)
 #f5# Select items for specific command(s) from history
-  selhist() {
-        emulate -L zsh
-        local TAB=$'\t';
-        (( $# < 1 )) && {
-                echo "Usage: $0 command"
-                return 1
-        };
-        cmd=(${(f)"$(grep -w $1 $HISTFILE | sort | uniq | pr -tn)"})
-        print -l $cmd | less -F
-        echo -n "enter number of desired command [1 - $(( ${#cmd[@]} - 1 ))]: "
-        local answer
-        read answer
-        print -z "${cmd[$answer]#*$TAB}"
-  }
+selhist() {
+    emulate -L zsh
+    local TAB=$'\t';
+    (( $# < 1 )) && {
+        echo "Usage: $0 command"
+        return 1
+    };
+    cmd=(${(f)"$(grep -w $1 $HISTFILE | sort | uniq | pr -tn)"})
+    print -l $cmd | less -F
+    echo -n "enter number of desired command [1 - $(( ${#cmd[@]} - 1 ))]: "
+    local answer
+    read answer
+    print -z "${cmd[$answer]#*$TAB}"
+}
 
 # Use vim to convert plaintext to HTML
-  #f5# Transform files to html with highlighting
-  2html() { vim -u NONE -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 &>/dev/null }
+#f5# Transform files to html with highlighting
+2html() { vim -u NONE -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 &>/dev/null }
 
 # Usage: simple-extract <file>
 #f5# Smart archive extractor
-  simple-extract () {
-        if [[ -f $1 ]] ; then
-                case $1 in
-                        *.tar.bz2)  bzip2 -v -d $1      ;;
-                        *.tar.gz)   tar -xvzf $1        ;;
-                        *.rar)      unrar $1            ;;
-                        *.deb)      ar -x $1            ;;
-                        *.bz2)      bzip2 -d $1         ;;
-                        *.lzh)      lha x $1            ;;
-                        *.gz)       gunzip -d $1        ;;
-                        *.tar)      tar -xvf $1         ;;
-                        *.tgz)      gunzip -d $1        ;;
-                        *.tbz2)     tar -jxvf $1        ;;
-                        *.zip)      unzip $1            ;;
-                        *.Z)        uncompress $1       ;;
-                        *)          echo "'$1' Error. Please go away" ;;
-                esac
-        else
-                echo "'$1' is not a valid file"
-        fi
-  }
+simple-extract () {
+    if [[ -f $1 ]] ; then
+        case $1 in
+            *.tar.bz2)  bzip2 -v -d $1      ;;
+            *.tar.gz)   tar -xvzf $1        ;;
+            *.rar)      unrar $1            ;;
+            *.deb)      ar -x $1            ;;
+            *.bz2)      bzip2 -d $1         ;;
+            *.lzh)      lha x $1            ;;
+            *.gz)       gunzip -d $1        ;;
+            *.tar)      tar -xvf $1         ;;
+            *.tgz)      gunzip -d $1        ;;
+            *.tbz2)     tar -jxvf $1        ;;
+            *.zip)      unzip $1            ;;
+            *.Z)        uncompress $1       ;;
+            *)          echo "'$1' Error. Please go away" ;;
+        esac
+    else
+        echo "'$1' is not a valid file"
+    fi
+}
 
 # Usage: smartcompress <file> (<type>)
 #f5# Smart archive creator
-  smartcompress() {
-        if [[ -n $2 ]] ; then
-                case $2 in
-                        tgz | tar.gz)   tar -zcvf$1.$2 $1 ;;
-                        tbz2 | tar.bz2) tar -jcvf$1.$2 $1 ;;
-                        tar.Z)          tar -Zcvf$1.$2 $1 ;;
-                        tar)            tar -cvf$1.$2  $1 ;;
-                        gz | gzip)      gzip           $1 ;;
-                        bz2 | bzip2)    bzip2          $1 ;;
-                        *)
-                        echo "Error: $2 is not a valid compression type"
-                        ;;
-                esac
-        else
-                smartcompress $1 tar.gz
-        fi
-  }
+smartcompress() {
+    if [[ -n $2 ]] ; then
+        case $2 in
+            tgz | tar.gz)   tar -zcvf$1.$2 $1 ;;
+            tbz2 | tar.bz2) tar -jcvf$1.$2 $1 ;;
+            tar.Z)          tar -Zcvf$1.$2 $1 ;;
+            tar)            tar -cvf$1.$2  $1 ;;
+            gz | gzip)      gzip           $1 ;;
+            bz2 | bzip2)    bzip2          $1 ;;
+            *)
+                echo "Error: $2 is not a valid compression type"
+                ;;
+        esac
+    else
+        smartcompress $1 tar.gz
+    fi
+}
 
 # Usage: show-archive <archive>
 #f5# List an archive's content
-  show-archive() {
-        if [[ -f $1 ]] ; then
-                case $1 in
-                        *.tar.gz)      gunzip -c $1 | tar -tf - -- ;;
-                        *.tar)         tar -tf $1 ;;
-                        *.tgz)         tar -ztf $1 ;;
-                        *.zip)         unzip -l $1 ;;
-                        *.bz2)         bzless $1 ;;
-                        *)             echo "'$1' Error. Please go away" ;;
-                esac
-        else
-                echo "'$1' is not a valid archive"
-        fi
-  }
+show-archive() {
+    if [[ -f $1 ]] ; then
+        case $1 in
+            *.tar.gz)      gunzip -c $1 | tar -tf - -- ;;
+            *.tar)         tar -tf $1 ;;
+            *.tgz)         tar -ztf $1 ;;
+            *.zip)         unzip -l $1 ;;
+            *.bz2)         bzless $1 ;;
+            *)             echo "'$1' Error. Please go away" ;;
+        esac
+    else
+        echo "'$1' is not a valid archive"
+    fi
+}
 
+# TODO: isn't ssl() like this, but clean?
+#       I'd like to remove this, it's a gross hack, IMHO -ft
 #f5# Follow symlinks
-  folsym() {
+folsym() {
     if [[ -e $1 || -h $1 ]] ; then
         file=$1
     else
     else
         echo $file
     fi
-  }
+}
 
 # It's shameless stolen from <http://www.vim.org/tips/tip.php?tip_id=167>
 #f5# Use \kbd{vim} as your manpage reader
-  vman() { man $* | col -b | view -c 'set ft=man nomod nolist' - }
+vman() { man $* | col -b | view -c 'set ft=man nomod nolist' - }
 
 # function readme() { $PAGER -- (#ia3)readme* }
 #f5# View all README-like files in current directory in pager
-  readme() {
-        local files
-        files=(./(#i)*(read*me|lue*m(in|)ut)*(ND))
-        if (($#files))
-        then $PAGER $files
-        else
-                print 'No README files.'
-        fi
-  }
+readme() {
+    local files
+    files=(./(#i)*(read*me|lue*m(in|)ut)*(ND))
+    if (($#files)) ; then
+        $PAGER $files
+    else
+        print 'No README files.'
+    fi
+}
 
 # suidfind() { ls -latg $path | grep '^...s' }
 #f5# Find all files in \$PATH with setuid bit set
-  suidfind() { ls -latg $path/*(sN) }
+suidfind() { ls -latg $path/*(sN) }
 
 # See above but this is /better/ ... anywise ..
-  findsuid() {
+findsuid() {
     print 'Output will be written to ~/suid_* ...'
     $SUDO find / -type f \( -perm -4000 -o -perm -2000 \) -ls > ~/suid_suidfiles.`date "+%Y-%m-%d"`.out 2>&1
     $SUDO find / -type d \( -perm -4000 -o -perm -2000 \) -ls > ~/suid_suiddirs.`date "+%Y-%m-%d"`.out 2>&1
     $SUDO find / -type f \( -perm -2 -o -perm -20 \) -ls > ~/suid_writefiles.`date "+%Y-%m-%d"`.out 2>&1
     $SUDO find / -type d \( -perm -2 -o -perm -20 \) -ls > ~/suid_writedirs.`date "+%Y-%m-%d"`.out 2>&1
     print 'Finished'
-  }
+}
 
 #f5# Reload given functions
-  refunc() {
-        for func in $argv
-        do
-                unfunction $func
-                autoload $func
-        done
-  }
+refunc() {
+    for func in $argv ; do
+        unfunction $func
+        autoload $func
+    done
+}
 
 # a small check to see which DIR is located on which server/partition.
 # stolen and modified from Sven's zshrc.forall
-  #f5# Report diskusage of a directory
-  dirspace() {
+#f5# Report diskusage of a directory
+dirspace() {
     if [[ -n "$1" ]] ; then
-       for dir in $* ; do
-          if [[ -d "$dir" ]] ; then
-             ( cd $dir; echo "-<$dir>"; du -shx .; echo);
-          else
-             echo "warning: $dir does not exist" >&2
-          fi
-       done
+        for dir in $* ; do
+            if [[ -d "$dir" ]] ; then
+                ( cd $dir; echo "-<$dir>"; du -shx .; echo);
+            else
+                echo "warning: $dir does not exist" >&2
+            fi
+        done
     else
         for dir in $path; do
-          if [[ -d "$dir" ]] ; then
-             ( cd $dir; echo "-<$dir>"; du -shx .; echo);
-          else
-             echo "warning: $dir does not exist" >&2
-          fi
+            if [[ -d "$dir" ]] ; then
+                ( cd $dir; echo "-<$dir>"; du -shx .; echo);
+            else
+                echo "warning: $dir does not exist" >&2
+            fi
         done
     fi
-  }
+}
 
 # % slow_print `cat /etc/passwd`
 #f5# Slowly print out parameters
-  slow_print() {
-        for argument in "${@}"
-        do
-                for ((i = 1; i <= ${#1} ;i++)) {
-                        print -n "${argument[i]}"
-                        sleep 0.08
-                }
-                print -n " "
+slow_print() {
+    for argument in "${@}" ; do
+        for ((i = 1; i <= ${#1} ;i++)) ; do
+            print -n "${argument[i]}"
+            sleep 0.08
         done
-        print ""
-  }
+        print -n " "
+    done
+    print ""
+}
 
 #f5# Show some status info
-  status() {
-        print ""
-        print "Date..: "$(date "+%Y-%m-%d %H:%M:%S")""
-        print "Shell.: Zsh $ZSH_VERSION (PID = $$, $SHLVL nests)"
-        print "Term..: $TTY ($TERM), $BAUD bauds, $COLUMNS x $LINES cars"
-        print "Login.: $LOGNAME (UID = $EUID) on $HOST"
-        print "System: $(cat /etc/[A-Za-z]*[_-][rv]e[lr]*)"
-        print "Uptime:$(uptime)"
-        print ""
-  }
+status() {
+    print ""
+    print "Date..: "$(date "+%Y-%m-%d %H:%M:%S")""
+    print "Shell.: Zsh $ZSH_VERSION (PID = $$, $SHLVL nests)"
+    print "Term..: $TTY ($TERM), $BAUD bauds, $COLUMNS x $LINES cars"
+    print "Login.: $LOGNAME (UID = $EUID) on $HOST"
+    print "System: $(cat /etc/[A-Za-z]*[_-][rv]e[lr]*)"
+    print "Uptime:$(uptime)"
+    print ""
+}
 
 # Rip an audio CD
-  #f5# Rip an audio CD
-  audiorip() {
-        mkdir -p ~/ripps
-        cd ~/ripps
-        cdrdao read-cd --device $DEVICE --driver generic-mmc audiocd.toc
-        cdrdao read-cddb --device $DEVICE --driver generic-mmc audiocd.toc
-        echo " * Would you like to burn the cd now? (yes/no)"
-        read input
-        if
-                [[ "$input" = "yes" ]] ; then
-                echo " ! Burning Audio CD"
-                audioburn
-                echo " * done."
-        else
-                echo " ! Invalid response."
-        fi
-  }
+#f5# Rip an audio CD
+audiorip() {
+    mkdir -p ~/ripps
+    cd ~/ripps
+    cdrdao read-cd --device $DEVICE --driver generic-mmc audiocd.toc
+    cdrdao read-cddb --device $DEVICE --driver generic-mmc audiocd.toc
+    echo " * Would you like to burn the cd now? (yes/no)"
+    read input
+    if [[ "$input" = "yes" ]] ; then
+        echo " ! Burning Audio CD"
+        audioburn
+        echo " * done."
+    else
+        echo " ! Invalid response."
+    fi
+}
 
 # and burn it
-  #f5# Burn an audio CD (in combination with audiorip)
-  audioburn() {
-        cd ~/ripps
-        cdrdao write --device $DEVICE --driver generic-mmc audiocd.toc
-        echo " * Should I remove the temporary files? (yes/no)"
-        read input
-        if [[ "$input" = "yes" ]] ; then
-                echo " ! Removing Temporary Files."
-                cd ~
-                rm -rf ~/ripps
-                echo " * done."
-        else
-                echo " ! Invalid response."
-        fi
-  }
+#f5# Burn an audio CD (in combination with audiorip)
+audioburn() {
+    cd ~/ripps
+    cdrdao write --device $DEVICE --driver generic-mmc audiocd.toc
+    echo " * Should I remove the temporary files? (yes/no)"
+    read input
+    if [[ "$input" = "yes" ]] ; then
+        echo " ! Removing Temporary Files."
+        cd ~
+        rm -rf ~/ripps
+        echo " * done."
+    else
+        echo " ! Invalid response."
+    fi
+}
 
 #f5# Make an audio CD from all mp3 files
-  mkaudiocd() {
-        cd ~/ripps
-        for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done
-        for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done
-        for i in *.mp3; do mpg123 -w `basename $i .mp3`.wav $i; done
-        normalize -m *.wav
-        for i in *.wav; do sox $i.wav -r 44100 $i.wav resample; done
-  }
+mkaudiocd() {
+    # TODO: do the renaming more zshish, possibly with zmv()
+    cd ~/ripps
+    for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done
+    for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done
+    for i in *.mp3; do mpg123 -w `basename $i .mp3`.wav $i; done
+    normalize -m *.wav
+    for i in *.wav; do sox $i.wav -r 44100 $i.wav resample; done
+}
 
 #f5# Create an ISO image. You are prompted for\\&\quad volume name, filename and directory
-  mkiso() {
-        echo " * Volume name "
-        read volume
-        echo " * ISO Name (ie. tmp.iso)"
-        read iso
-        echo " * Directory or File"
-        read files
-        mkisofs -o ~/$iso -A $volume -allow-multidot -J -R -iso-level 3 -V $volume -R $files
-  }
+mkiso() {
+    echo " * Volume name "
+    read volume
+    echo " * ISO Name (ie. tmp.iso)"
+    read iso
+    echo " * Directory or File"
+    read files
+    mkisofs -o ~/$iso -A $volume -allow-multidot -J -R -iso-level 3 -V $volume -R $files
+}
 
 #f5# Simple thumbnails generator
-  genthumbs () {
+genthumbs() {
     rm -rf thumb-* index.html
     echo "
 <html>
     <title>Images</title>
   </head>
   <body>" > index.html
-    for f in *.(gif|jpeg|jpg|png)
-    do
+    for f in *.(gif|jpeg|jpg|png) ; do
         convert -size 100x200 "$f" -resize 100x200 thumb-"$f"
         echo "    <a href=\"$f\"><img src=\"thumb-$f\"></a>" >> index.html
     done
     echo "
   </body>
 </html>" >> index.html
-  }
+}
 
 #f5# Set all ulimit parameters to \kbd{unlimited}
-  allulimit() {
+allulimit() {
     ulimit -c unlimited
     ulimit -d unlimited
     ulimit -f unlimited
     ulimit -n unlimited
     ulimit -s unlimited
     ulimit -t unlimited
-  }
+}
 
 # ogg2mp3 with bitrate of 192
-  ogg2mp3_192() {
+ogg2mp3_192() {
     oggdec -o - ${1} | lame -b 192 - ${1:r}.mp3
-  }
+}
 
 #f5# RFC 2396 URL encoding in Z-Shell
-  urlencode() {
-   setopt localoptions extendedglob
-   input=( ${(s::)1} )
-   print ${(j::)input/(#b)([^A-Za-z0-9_.!~*\'\(\)-])/%$(([##16]#match))}
-  }
+urlencode() {
+    setopt localoptions extendedglob
+    input=( ${(s::)1} )
+    print ${(j::)input/(#b)([^A-Za-z0-9_.!~*\'\(\)-])/%$(([##16]#match))}
+}
 
 #f5# Install x-lite (VoIP software)
-  getxlite() {
+getxlite() {
     setopt local_options
     setopt errreturn
     [[ -d ~/tmp ]] || mkdir ~/tmp
     cd ~/tmp
+
     echo "Downloading http://www.counterpath.com/download/X-Lite_Install.tar.gz and storing it in ~/tmp:"
     if wget http://www.counterpath.com/download/X-Lite_Install.tar.gz ; then
-       unp X-Lite_Install.tar.gz && echo done || echo failed
+        unp X-Lite_Install.tar.gz && echo done || echo failed
     else
-       echo "Error while downloading." ; return 1
+        echo "Error while downloading." ; return 1
     fi
+
     if [[ -x xten-xlite/xtensoftphone ]] ; then
-       echo "Execute xten-xlite/xtensoftphone to start xlite."
+        echo "Execute xten-xlite/xtensoftphone to start xlite."
     fi
-   }
+}
 
 #f5# Install skype
-  getskype() {
+getskype() {
     setopt local_options
     setopt errreturn
     echo "Downloading debian package of skype."
     echo "Notice: If you want to use a more recent skype version run 'getskypebeta'."
     wget http://www.skype.com/go/getskype-linux-deb
     $SUDO dpkg -i skype*.deb && echo "skype installed."
-  }
+}
 
 #f5# Install beta-version of skype
-  getskypebeta() {
+getskypebeta() {
     setopt local_options
     setopt errreturn
     echo "Downloading debian package of skype (beta version)."
     wget http://www.skype.com/go/getskype-linux-beta-deb
     $SUDO dpkg -i skype-beta*.deb && echo "skype installed."
-  }
+}
 
 #f5# Install gizmo (VoIP software)
-  getgizmo() {
+getgizmo() {
     setopt local_options
     setopt errreturn
     echo "gconf2-common and libgconf2-4 have to be available. Installing therefor."
     $SUDO apt-get install gconf2-common libgconf2-4
     wget $(lynx --dump http://www.gizmoproject.com/download-linux.html | awk '/\.deb/ {print $2" "}' | tr -d '\n')
     $SUDO dpkg -i libsipphoneapi*.deb bonjour_*.deb gizmo-*.deb && echo "gizmo installed."
-  }
+}
 
 #f5# Get and run AIR (Automated Image and Restore)
-  getair() {
+getair() {
     setopt local_options
     setopt errreturn
     [[ -w . ]] || { echo 'Error: you do not have write permissions in this directory. Exiting.' ; return 1 }
     cd air-$VER
     INTERACTIVE=no $SUDO ./install-air-1.2.8
     [[ -x /usr/local/bin/air ]] && [[ -n "$DISPLAY" ]] && $SUDO air
-  }
+}
 
 #f5# Get specific git commitdiff
-  git-get-diff() {
+git-get-diff() {
     if [[ -z $GITTREE ]] ; then
-      GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
+        GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
     fi
     if ! [[ -z $1 ]] ; then
-     ${=BROWSER} "http://kernel.org/git/?p=$GITTREE;a=commitdiff;h=$1"
+        ${=BROWSER} "http://kernel.org/git/?p=$GITTREE;a=commitdiff;h=$1"
     else
-      echo "Usage: git-get-diff <commit>"
+        echo "Usage: git-get-diff <commit>"
     fi
-  }
+}
 
 #f5# Get specific git commit
-  git-get-commit() {
+git-get-commit() {
     if [[ -z $GITTREE ]] ; then
-      GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
+        GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
     fi
     if ! [[ -z $1 ]] ; then
-     ${=BROWSER} "http://kernel.org/git/?p=$GITTREE;a=commit;h=$1"
+        ${=BROWSER} "http://kernel.org/git/?p=$GITTREE;a=commit;h=$1"
     else
-      echo "Usage: git-get-commit <commit>"
+        echo "Usage: git-get-commit <commit>"
     fi
-  }
+}
 
 #f5# Get specific git diff
-  git-get-plaindiff() {
+git-get-plaindiff() {
     if [[ -z $GITTREE ]] ; then
-      GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
+        GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
     fi
     if ! [[ -z $1 ]] ; then
-      wget "http://kernel.org/git/?p=$GITTREE;a=commitdiff_plain;h=$1" -O $1.diff
+        wget "http://kernel.org/git/?p=$GITTREE;a=commitdiff_plain;h=$1" -O $1.diff
     else
-      echo 'Usage: git-get-plaindiff '
+        echo 'Usage: git-get-plaindiff '
     fi
-  }
+}
 
 # http://strcat.de/blog/index.php?/archives/335-Software-sauber-deinstallieren...html
 #f5# Log 'make install' output
-  mmake() {
+mmake() {
     [[ ! -d ~/.errorlogs ]] && mkdir ~/.errorlogs
-    =make -n install > ~/.errorlogs/${PWD##*/}-makelog
-  }
+    make -n install > ~/.errorlogs/${PWD##*/}-makelog
+}
 
 #f5# Indent source code
-  smart-indent() {
+smart-indent() {
     indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs $*
-  }
+}
 
 # highlight important stuff in diff output, usage example: hg diff | hidiff
-  #m# a2 hidiff \kbd{histring} oneliner for diffs
-  [[ -x $(type histring) ]] && \
-  alias hidiff="histring -fE '^Comparing files .*|^diff .*' | histring -c yellow -fE '^\-.*' | histring -c green -fE '^\+.*'"
+#m# a2 hidiff \kbd{histring} oneliner for diffs
+check_com -c histring && \
+    alias hidiff="histring -fE '^Comparing files .*|^diff .*' | histring -c yellow -fE '^\-.*' | histring -c green -fE '^\+.*'"
 
 # rename pictures based on information found in exif headers
-  #f5# Rename pictures based on information found in exif headers
-  exirename() {
+#f5# Rename pictures based on information found in exif headers
+exirename() {
     if [[ $# -lt 1 ]] ; then
-       echo 'Usage: jpgrename $FILES' >& 2
-       return 1
+        echo 'Usage: jpgrename $FILES' >& 2
+        return 1
     else
-       echo -n 'Checking for jhead with version newer than 1.9: '
-       jhead_version=`jhead -h | grep 'used by most Digital Cameras.  v.*' | awk '{print $6}' | tr -d v`
-       if [[ $jhead_version > '1.9' ]]; then
-          echo 'success - now running jhead.'
-          jhead -n%Y-%m-%d_%Hh%M_%f $*
-       else
-          echo 'failed - exiting.'
-       fi
+        echo -n 'Checking for jhead with version newer than 1.9: '
+        jhead_version=`jhead -h | grep 'used by most Digital Cameras.  v.*' | awk '{print $6}' | tr -d v`
+        if [[ $jhead_version > '1.9' ]]; then
+            echo 'success - now running jhead.'
+            jhead -n%Y-%m-%d_%Hh%M_%f $*
+        else
+            echo 'failed - exiting.'
+        fi
     fi
-  }
+}
 
 # open file in vim and jump to line
 # http://www.downgra.de/archives/2007/05/08/T19_21_11/
-  j2v() {
+j2v() {
     local -a params
     params=(${*//(#m):[0-9]*:/\\n+${MATCH//:/}}) # replace ':23:' to '\n+23'
     params=(${(s|\n|)${(j|\n|)params}}) # join array using '\n', then split on all '\n'
     vim ${params}
-  }
+}
 
 # get_ic() - queries imap servers for capabilities; real simple. no imaps
-  ic_get() {
+ic_get() {
     local port
     if [[ ! -z $1 ]] ; then
-      port=${2:-143}
-      print "querying imap server on $1:${port}...\n";
-      print "a1 capability\na2 logout\n" | nc $1 ${port}
+        port=${2:-143}
+        print "querying imap server on $1:${port}...\n";
+        print "a1 capability\na2 logout\n" | nc $1 ${port}
     else
-      print "usage:\n  $0 <imap-server> [port]"
+        print "usage:\n  $0 <imap-server> [port]"
     fi
-  }
+}
 
 # creates a Maildir/ with its {new,cur,tmp} subdirs
-  mkmaildir() {
+mkmaildir() {
     local root subdir
     root=${MAILDIR_ROOT:-${HOME}/Mail}
     if [[ -z ${1} ]] ; then print "Usage:\n $0 <dirname>" ; return 1 ; fi
     subdir=${1}
     mkdir -p ${root}/${subdir}/{cur,new,tmp}
-  }
+}
 
 # xtrename() rename xterm from within GNU-screen
-  xtrename() {
+xtrename() {
     if [[ -z ${DISPLAY} ]] ; then
-      printf 'xtrename only makes sense in X11.\n'
-      return 1
+        printf 'xtrename only makes sense in X11.\n'
+        return 1
     fi
     if [[ -z ${1} ]] ; then
-      printf 'usage: xtrename() "title for xterm"\n'
-      printf '  renames the title of xterm from _within_ screen.\n'
-      printf '  Also works without screen.\n'
-      return 0
+        printf 'usage: xtrename() "title for xterm"\n'
+        printf '  renames the title of xterm from _within_ screen.\n'
+        printf '  Also works without screen.\n'
+        return 0
     fi
     print -n "\eP\e]0;${1}\C-G\e\\"
     return 0
-  }
+}
 
 # hl() highlighted less
 # http://ft.bewatermyfriend.org/comp/data/zsh/zfunct.html
-  if [[ -x $(type highlight) ]] ; then
+if check_com -c highlight ; then
     function hl() {
-      local theme lang
-      theme=${HL_THEME:-""}
-      case ${1} in
-        (-l|--list)
-          ( printf 'available languages (syntax parameter):\n\n' ;
-            highlight --list-langs ; ) | less -SMr
-          ;;
-        (-t|--themes)
-          ( printf 'available themes (style parameter):\n\n' ;
-            highlight --list-themes ; ) | less -SMr
-          ;;
-        (-h|--help)
-          printf 'usage: hl <syntax[:theme]> <file>\n'
-          printf '    available options: --list (-l), --themes (-t), --help (-h)\n\n'
-          printf '  Example: hl c main.c\n'
-          ;;
-        (*)
-          if [[ -z ${2} ]] || (( ${#argv} > 2 )) ; then
-            printf 'usage: hl <syntax[:theme]> <file>\n'
-            printf '    available options: --list (-l), --themes (-t), --help (-h)\n'
-            (( ${#argv} > 2 )) && printf '  Too many arguments.\n'
-            return 1
-          fi
-          lang=${1%:*}
-          [[ ${1} == *:* ]] && [[ -n ${1#*:} ]] && theme=${1#*:}
-          if [[ -n ${theme} ]] ; then
-            highlight --xterm256 --syntax ${lang} --style ${theme} ${2} | less -SMr
-          else
-            highlight --ansi --syntax ${lang} ${2} | less -SMr
-          fi
-          ;;
-      esac
-      return 0
+        local theme lang
+        theme=${HL_THEME:-""}
+        case ${1} in
+            (-l|--list)
+                ( printf 'available languages (syntax parameter):\n\n' ;
+                    highlight --list-langs ; ) | less -SMr
+                ;;
+            (-t|--themes)
+                ( printf 'available themes (style parameter):\n\n' ;
+                    highlight --list-themes ; ) | less -SMr
+                ;;
+            (-h|--help)
+                printf 'usage: hl <syntax[:theme]> <file>\n'
+                printf '    available options: --list (-l), --themes (-t), --help (-h)\n\n'
+                printf '  Example: hl c main.c\n'
+                ;;
+            (*)
+                if [[ -z ${2} ]] || (( ${#argv} > 2 )) ; then
+                    printf 'usage: hl <syntax[:theme]> <file>\n'
+                    printf '    available options: --list (-l), --themes (-t), --help (-h)\n'
+                    (( ${#argv} > 2 )) && printf '  Too many arguments.\n'
+                    return 1
+                fi
+                lang=${1%:*}
+                [[ ${1} == *:* ]] && [[ -n ${1#*:} ]] && theme=${1#*:}
+                if [[ -n ${theme} ]] ; then
+                    highlight --xterm256 --syntax ${lang} --style ${theme} ${2} | less -SMr
+                else
+                    highlight --ansi --syntax ${lang} ${2} | less -SMr
+                fi
+                ;;
+        esac
+        return 0
     }
     # ... and a proper completion for hl()
     # needs 'highlight' as well, so it fits fine in here.
     function _hl_genarg()  {
-      local expl
-      if [[ -prefix 1 *: ]] ; then
-        local themes
-        themes=(${${${(f)"$(LC_ALL=C highlight --list-themes)"}/ #/}:#*(Installed|Use name)*})
-        compset -P 1 '*:'
-        _wanted -C list themes expl theme compadd ${themes}
-      else
-        local langs
-        langs=(${${${(f)"$(LC_ALL=C highlight --list-langs)"}/ #/}:#*(Installed|Use name)*})
-        _wanted -C list languages expl languages compadd -S ':' -q ${langs}
-      fi
+        local expl
+        if [[ -prefix 1 *: ]] ; then
+            local themes
+            themes=(${${${(f)"$(LC_ALL=C highlight --list-themes)"}/ #/}:#*(Installed|Use name)*})
+            compset -P 1 '*:'
+            _wanted -C list themes expl theme compadd ${themes}
+        else
+            local langs
+            langs=(${${${(f)"$(LC_ALL=C highlight --list-langs)"}/ #/}:#*(Installed|Use name)*})
+            _wanted -C list languages expl languages compadd -S ':' -q ${langs}
+        fi
     }
     function _hl_complete() {
-      _arguments -s '1: :_hl_genarg' '2:files:_path_files'
+        _arguments -s '1: :_hl_genarg' '2:files:_path_files'
     }
     compdef _hl_complete hl
-  fi
+fi
 
 # create small urls via tinyurl.com using wget, grep and sed
-  zurl() {
-  [[ -z ${1} ]] && print "please give an url to shrink." && return 1
-  local url=${1}
-  local tiny="http://tinyurl.com/create.php?url="
-  #print "${tiny}${url}" ; return
-  wget  -O-             \
-        -o/dev/null     \
-        "${tiny}${url}" \
-    | grep -Eio 'value="(http://tinyurl.com/.*)"' \
-    | sed 's/value=//;s/"//g'
+zurl() {
+    [[ -z ${1} ]] && print "please give an url to shrink." && return 1
+    local url=${1}
+    local tiny="http://tinyurl.com/create.php?url="
+    #print "${tiny}${url}" ; return
+    wget  -O-             \
+          -o/dev/null     \
+          "${tiny}${url}" \
+        | grep -Eio 'value="(http://tinyurl.com/.*)"' \
+        | sed 's/value=//;s/"//g'
 }
 
 # change fluxbox keys from 'Alt-#' to 'Alt-F#' and vice versa
-  fluxkey-change() {
+fluxkey-change() {
     [[ -n "$FLUXKEYS" ]] || local FLUXKEYS="$HOME/.fluxbox/keys"
     if ! [[ -r "$FLUXKEYS" ]] ; then
-       echo "Sorry, \$FLUXKEYS file $FLUXKEYS could not be read - nothing to be done."
-       return 1
+        echo "Sorry, \$FLUXKEYS file $FLUXKEYS could not be read - nothing to be done."
+        return 1
     else
-       if grep -q 'Mod1 F[0-9] :Workspace [0-9]' $FLUXKEYS ; then
-          echo -n 'Switching to Alt-# mode in ~/.fluxbox/keys: '
-          sed -i -e 's|^\(Mod[0-9]\+[: space :]\+\)F\([0-9]\+[: space :]\+:Workspace.*\)|\1\2|' $FLUXKEYS && echo done || echo failed
-       elif grep -q 'Mod1 [0-9] :Workspace [0-9]' $FLUXKEYS ; then
-          echo -n 'Switching to Alt-F# mode in ~/.fluxbox/keys: '
-          sed -i -e 's|^\(Mod[0-9]\+[: space :]\+\)\([0-9]\+[: space :]\+:Workspace.*\)|\1F\2|' $FLUXKEYS && echo done || echo failed
-       else
-          echo 'Sorry, do not know what to do.'
-          return 1
-       fi
+        if grep -q 'Mod1 F[0-9] :Workspace [0-9]' $FLUXKEYS ; then
+            echo -n 'Switching to Alt-# mode in ~/.fluxbox/keys: '
+            sed -i -e 's|^\(Mod[0-9]\+[: space :]\+\)F\([0-9]\+[: space :]\+:Workspace.*\)|\1\2|' $FLUXKEYS && echo done || echo failed
+        elif grep -q 'Mod1 [0-9] :Workspace [0-9]' $FLUXKEYS ; then
+            echo -n 'Switching to Alt-F# mode in ~/.fluxbox/keys: '
+            sed -i -e 's|^\(Mod[0-9]\+[: space :]\+\)\([0-9]\+[: space :]\+:Workspace.*\)|\1F\2|' $FLUXKEYS && echo done || echo failed
+        else
+            echo 'Sorry, do not know what to do.'
+            return 1
+        fi
     fi
-  }
+}
 
 # retrieve weather information on the console
 # Usage example: 'weather LOWG'
-  weather () {
-   [[ -n "$1" ]] || {
-           print 'Usage: weather <station_id>' >&2
-           return 1
-   }
-
-   local PLACE="${1:u}"
-   local FILE="$HOME/.weather/$PLACE"
-   local LOG="$HOME/.weather/log"
-
-   [[ -d $HOME/.weather ]] || {
-           print -n "Creating $HOME/.weather: "
-           mkdir $HOME/.weather
-           print 'done'
-   }
-
-   print "Retrieving information for ${PLACE}:"
-   print
-   wget -T 10 --no-verbose --output-file=$LOG --output-document=$FILE --timestamping http://weather.noaa.gov/pub/data/observations/metar/decoded/$PLACE.TXT
-
-   if [[ $? -eq 0 ]] ; then
-           if [[ -n "$VERBOSE" ]] ; then
-                   cat $FILE
-           else
-                   DATE=$(grep 'UTC' $FILE | sed 's#.* /##')
-                   TEMPERATURE=$(awk '/Temperature/ { print $4" degree Celcius / " $2" degree Fahrenheit" }' $FILE| tr -d '(')
-                   echo "date: $DATE"
-                   echo "temp:  $TEMPERATURE"
-           fi
-   else
-           print "There was an error retrieving the weather information for $PLACE" >&2
-           cat $LOG
-           return 1
-   fi
-  }
+weather() {
+    [[ -n "$1" ]] || {
+        print 'Usage: weather <station_id>' >&2
+        return 1
+    }
+
+    local PLACE="${1:u}"
+    local FILE="$HOME/.weather/$PLACE"
+    local LOG="$HOME/.weather/log"
+
+    [[ -d $HOME/.weather ]] || {
+        print -n "Creating $HOME/.weather: "
+        mkdir $HOME/.weather
+        print 'done'
+    }
+
+    print "Retrieving information for ${PLACE}:"
+    print
+    wget -T 10 --no-verbose --output-file=$LOG --output-document=$FILE --timestamping http://weather.noaa.gov/pub/data/observations/metar/decoded/$PLACE.TXT
+
+    if [[ $? -eq 0 ]] ; then
+        if [[ -n "$VERBOSE" ]] ; then
+            cat $FILE
+        else
+            DATE=$(grep 'UTC' $FILE | sed 's#.* /##')
+            TEMPERATURE=$(awk '/Temperature/ { print $4" degree Celcius / " $2" degree Fahrenheit" }' $FILE| tr -d '(')
+            echo "date: $DATE"
+            echo "temp:  $TEMPERATURE"
+        fi
+    else
+        print "There was an error retrieving the weather information for $PLACE" >&2
+        cat $LOG
+        return 1
+    fi
+}
 
 
 # }}}
 
 # mercurial related stuff {{{
-  if type -p hg &>/dev/null ; then
-  # gnu like diff for mercurial
-  # http://www.selenic.com/mercurial/wiki/index.cgi/TipsAndTricks
+if check_com -c hg ; then
+    # gnu like diff for mercurial
+    # http://www.selenic.com/mercurial/wiki/index.cgi/TipsAndTricks
     #f5# GNU like diff for mercurial
     hgdi() {
-      for i in `hg status -marn "$@"` ; diff -ubwd <(hg cat "$i") "$i"
+        for i in $(hg status -marn "$@") ; diff -ubwd <(hg cat "$i") "$i"
     }
 
-  # build debian package
+    # build debian package
     #a2# Alias for \kbd{hg-buildpackage}
     alias hbp='hg-buildpackage'
 
-  # execute commands on the versioned patch-queue from the current repos
+    # execute commands on the versioned patch-queue from the current repos
     alias mq='hg -R $(readlink -f $(hg root)/.hg/patches)'
 
-  # diffstat for specific version of a mercurial repository
-  #   hgstat      => display diffstat between last revision and tip
-  #   hgstat 1234 => display diffstat between revision 1234 and tip
+    # diffstat for specific version of a mercurial repository
+    #   hgstat      => display diffstat between last revision and tip
+    #   hgstat 1234 => display diffstat between revision 1234 and tip
     #f5# Diffstat for specific version of a mercurial repos
     hgstat() {
-      [[ -n "$1" ]] && hg diff -r $1 -r tip | diffstat || hg export tip | diffstat
+        [[ -n "$1" ]] && hg diff -r $1 -r tip | diffstat || hg export tip | diffstat
     }
 
-  # get current mercurial tip via hg itself
     #f5# Get current mercurial tip via hg itself
     gethgclone() {
-      setopt local_options
-      setopt errreturn
-      if [[ -f mercurial-tree/.hg ]] ; then
-        cd mercurial-tree
-        echo "Running hg pull for retreiving latest version..."
-        hg pull
-        echo "Finished update. Building mercurial"
-        make local
-        echo "Setting \$PATH to $PWD:\$PATH..."
-        export PATH="$PWD:$PATH"
-      else
-        echo "Downloading mercurial via hg"
-        hg clone http://selenic.com/repo/hg mercurial-tree
-        cd mercurial-tree
-        echo "Building mercurial"
-        make local
-        echo "Setting \$PATH to $PWD:\$PATH..."
-        export PATH="$PWD:$PATH"
-        echo "make sure you set it permanent via ~/.zshrc if you plan to use it permanently."
-        # echo "Setting \$PYTHONPATH to PYTHONPATH=\${HOME}/lib/python,"
-        # export PYTHONPATH=${HOME}/lib/python
-      fi
+        setopt local_options
+        setopt errreturn
+        if [[ -f mercurial-tree/.hg ]] ; then
+            cd mercurial-tree
+            echo "Running hg pull for retreiving latest version..."
+            hg pull
+            echo "Finished update. Building mercurial"
+            make local
+            echo "Setting \$PATH to $PWD:\$PATH..."
+            export PATH="$PWD:$PATH"
+        else
+            echo "Downloading mercurial via hg"
+            hg clone http://selenic.com/repo/hg mercurial-tree
+            cd mercurial-tree
+            echo "Building mercurial"
+            make local
+            echo "Setting \$PATH to $PWD:\$PATH..."
+            export PATH="$PWD:$PATH"
+            echo "make sure you set it permanent via ~/.zshrc if you plan to use it permanently."
+            # echo "Setting \$PYTHONPATH to PYTHONPATH=\${HOME}/lib/python,"
+            # export PYTHONPATH=${HOME}/lib/python
+        fi
     }
 
-  fi # end of check whether we have the 'hg'-executable
+fi # end of check whether we have the 'hg'-executable
 
-  # get current mercurial snapshot
-    #f5# Get current mercurial snapshot
-    gethgsnap() {
-      setopt local_options
-      setopt errreturn
-      if [[ -f mercurial-snapshot.tar.gz ]] ; then
+# get current mercurial snapshot
+#f5# Get current mercurial snapshot
+gethgsnap() {
+    setopt local_options
+    setopt errreturn
+    if [[ -f mercurial-snapshot.tar.gz ]] ; then
          echo "mercurial-snapshot.tar.gz exists already, skipping download."
-      else
+    else
         echo "Downloading mercurial snapshot"
         wget http://www.selenic.com/mercurial/mercurial-snapshot.tar.gz
-      fi
-      echo "Unpacking mercurial-snapshot.tar.gz"
-      tar zxf mercurial-snapshot.tar.gz
-      cd mercurial-snapshot/
-      echo "Installing required build-dependencies"
-      $SUDO apt-get update
-      $SUDO apt-get install python2.4-dev
-      echo "Building mercurial"
-      make local
-      echo "Setting \$PATH to $PWD:\$PATH..."
-      export PATH="$PWD:$PATH"
-      echo "make sure you set it permanent via ~/.zshrc if you plan to use it permanently."
-    }
+    fi
+    echo "Unpacking mercurial-snapshot.tar.gz"
+    tar zxf mercurial-snapshot.tar.gz
+    cd mercurial-snapshot/
+    echo "Installing required build-dependencies"
+    $SUDO apt-get update
+    $SUDO apt-get install python2.4-dev
+    echo "Building mercurial"
+    make local
+    echo "Setting \$PATH to $PWD:\$PATH..."
+    export PATH="$PWD:$PATH"
+    echo "make sure you set it permanent via ~/.zshrc if you plan to use it permanently."
+}
 # }}}
 
 # some useful commands often hard to remember - let's grep for them {{{
 
 # Work around ion/xterm resize bug.
 #if [[ "$SHLVL" -eq 1 ]]; then
-#       if [[ -x $(type resize) ]]; then
+#       if check_com -c resize ; then
 #               eval `resize </dev/null`
 #       fi
 #fi
 #     $GRMLSMALL_SPECIFIC to 0 or comment out the variable definition.
 #  b) remove/rename .zshrc.grmlsmall
 #  c) comment out the following line
-  (( GRMLSMALL_SPECIFIC > 0 )) && isgrmlsmall && source ~/.zshrc.grmlsmall
+(( GRMLSMALL_SPECIFIC > 0 )) && isgrmlsmall && source ~/.zshrc.grmlsmall
 
 # this allows us to stay in sync with /etc/skel/.zshrc
 # through 'ln -s /etc/skel/.zshrc ~/.zshrc' and put own
 # modifications in ~/.zshrc.local
-  if [[ -r ~/.zshrc.local ]] ; then
-     . ~/.zshrc.local
-  fi
+xsource "${HOME}/.zshrc.local"
+
+# ...and remove utility functions again.
+xunfunction
+
 # }}}
 
 ### doc strings for external functions from files
index 7bd3c11..ada7574 100644 (file)
@@ -7,18 +7,18 @@
 # Latest change: Mon Nov 05 12:20:27 CET 2007 [mika]
 ################################################################################
 
-  unset abk[V]
-  unalias    'V'      &> /dev/null
-  unfunction vman     &> /dev/null
-  unfunction vimpm    &> /dev/null
-  unfunction vimhelp  &> /dev/null
-  unfunction viless   &> /dev/null
-  unfunction 2html    &> /dev/null
+unset abk[V]
+unalias    'V'      &> /dev/null
+unfunction vman     &> /dev/null
+unfunction vimpm    &> /dev/null
+unfunction vimhelp  &> /dev/null
+unfunction viless   &> /dev/null
+unfunction 2html    &> /dev/null
 
 # manpages are not in grmlsmall
-  unfunction manzsh   &> /dev/null
-  unalias    man2     &> /dev/null
-  unalias    man      &> /dev/null
-  unfunction man2     &> /dev/null
+unfunction manzsh   &> /dev/null
+unalias    man2     &> /dev/null
+unalias    man      &> /dev/null
+unfunction man2     &> /dev/null
 
 ## END OF FILE #################################################################
index f7fb0b7..42ab708 100644 (file)
@@ -2,14 +2,14 @@
 # simple completion for fbset (switch resolution on console)
 
 fb_modes=(
-  640x480-60 640x480-72 640x480-75 640x480-90 640x480-100
-  768x576-75
-  800x600-48-lace 800x600-56 800x600-60 800x600-70 800x600-72 800x600-75 800x600-90 800x600-100
-  1024x768-43-lace 1024x768-60 1024x768-70 1024x768-72 1024x768-75 1024x768-90 1024x768-100
-  1152x864-43-lace 1152x864-47-lace 1152x864-60 1152x864-70 1152x864-75 1152x864-80
-  1280x960-75-8 1280x960-75 1280x960-75-32
-  1280x1024-43-lace 1280x1024-47-lace 1280x1024-60 1280x1024-70 1280x1024-74 1280x1024-75
-  1600x1200-60 1600x1200-66 1600x1200-76
+    640x480-60 640x480-72 640x480-75 640x480-90 640x480-100
+    768x576-75
+    800x600-48-lace 800x600-56 800x600-60 800x600-70 800x600-72 800x600-75 800x600-90 800x600-100
+    1024x768-43-lace 1024x768-60 1024x768-70 1024x768-72 1024x768-75 1024x768-90 1024x768-100
+    1152x864-43-lace 1152x864-47-lace 1152x864-60 1152x864-70 1152x864-75 1152x864-80
+    1280x960-75-8 1280x960-75 1280x960-75-32
+    1280x1024-43-lace 1280x1024-47-lace 1280x1024-60 1280x1024-70 1280x1024-74 1280x1024-75
+    1600x1200-60 1600x1200-66 1600x1200-76
 )
 
 compadd ${fb_modes}
index 50943ea..64c82aa 100644 (file)
@@ -1,5 +1,6 @@
+# vim:filetype=zsh
 if [[ -f /usr/share/grml/"$1" ]] ; then
-   Esetroot -scale /usr/share/grml/"$1"
+    Esetroot -scale /usr/share/grml/"$1"
 else
-   Esetroot -scale "$@"
+    Esetroot -scale "$@"
 fi
index 8accae0..16d8b00 100644 (file)
@@ -9,57 +9,60 @@
 # save output in a variable for later use
 # Written by Bart Schaefer, for more details see:
 # http://www.zsh.org/cgi-bin/mla/wilma_hiliter/users/2004/msg00894.html ff.
-  function keep {
+function keep {
     setopt localoptions nomarkdirs nonomatch nocshnullglob nullglob
     kept=()         # Erase old value in case of error on next line
     kept=($~*)
+
     if [[ ! -t 0 ]] ; then
         local line
         while read line; do
             kept+=( $line )         # += is a zsh 4.2+ feature
         done
     fi
+
     print -Rc - ${^kept%/}(T)
-  }
-  # use it via:
-  # locate -i backup | grep -i thursday | keep
-  # echo $kept
-  #
-  # or:
-  #
-  # patch < mypatch.diff
-  # keep **/*.(orig|rej)
-  # vim ${${kept:#*.orig}:r}
-  # rm $kept
-  alias keep='noglob keep'
+}
+# use it via:
+# locate -i backup | grep -i thursday | keep
+# echo $kept
+#
+# or:
+#
+# patch < mypatch.diff
+# keep **/*.(orig|rej)
+# vim ${${kept:#*.orig}:r}
+# rm $kept
+alias keep='noglob keep'
 
-  _insert_kept() {
+_insert_kept() {
     (( $#kept )) || return 1
     local action
     zstyle -s :completion:$curcontext insert-kept action
+
     if [[ -n $action ]] ; then
-      compstate[insert]=$action
+        compstate[insert]=$action
     elif [[ $WIDGET == *expand* ]] ; then
-      compstate[insert]=all
+        compstate[insert]=all
     fi
     if [[ $WIDGET == *expand* ]] ; then
-      compadd -U ${(M)kept:#${~words[CURRENT]}}
+        compadd -U ${(M)kept:#${~words[CURRENT]}}
     else
-      compadd -a kept
+        compadd -a kept
     fi
-  }
+}
 
-  # now bind it to keys and enable completition
-  zle -C insert-kept-result complete-word _generic
-  zle -C expand-kept-result complete-word _generic
-  zstyle ':completion:*-kept-result:*' completer _insert_kept
-  zstyle ':completion:insert-kept-result:*' menu yes select
+# now bind it to keys and enable completition
+zle -C insert-kept-result complete-word _generic
+zle -C expand-kept-result complete-word _generic
+zstyle ':completion:*-kept-result:*' completer _insert_kept
+zstyle ':completion:insert-kept-result:*' menu yes select
 
-  bindkey '^Xk' insert-kept-result
-  bindkey '^XK' expand-kept-result    # shift-K to get expansion
+bindkey '^Xk' insert-kept-result
+bindkey '^XK' expand-kept-result    # shift-K to get expansion
 
-  # And the "_expand_word_and_keep" replacement for _expand_word:
-  _expand_word_and_keep() {
+# And the "_expand_word_and_keep" replacement for _expand_word:
+_expand_word_and_keep() {
     function compadd() {
         local -A args
         zparseopts -E -A args J:
         builtin compadd "$@"
     }
     # for older versions of zsh:
-     local result
-     _main_complete _expand
-     result=$?
-     unfunction compadd
-     return result
+    local result
+    _main_complete _expand
+    result=$?
+    unfunction compadd
+    return result
     # versions >=4.2.1 understand this:
     # { _main_complete _expand } always { unfunction compadd }
-  }
+}
+
+# This line must come after "compinit" in startup:
+zle -C _expand_word complete-word _expand_word_and_keep
 
-  # This line must come after "compinit" in startup:
-  zle -C _expand_word complete-word _expand_word_and_keep
-  # No bindkey needed, it's already ^Xe from _expand_word
-  zstyle ':completion:*' insert-kept menu
-  zmodload -i zsh/complist
+# No bindkey needed, it's already ^Xe from _expand_word
+zstyle ':completion:*' insert-kept menu
+zmodload -i zsh/complist
 
+# vim:filetype=zsh
 ## END OF FILE #################################################################
index 643fd2c..8d06040 100644 (file)
@@ -8,6 +8,6 @@
 # Shutdown files (.zlogout and zlogout) are run, when a login shell exits.
 
 # make sure screen is empty on exit
-  clear
+clear
 
 ## END OF FILE #################################################################
index 0ef72b2..ee83290 100644 (file)
 
 # language settings (read in /etc/environment before /etc/default/locale as
 # the latter one is the default on Debian nowadays)
-  [[ -r /etc/environment ]] && source /etc/environment
+# no xsource() here because it's only created in zshrc! (which is good)
+[[ -r /etc/environment ]] && source /etc/environment
 
 # set environment variables (important for autologin on tty)
-  [[ -z "$HOSTNAME" ]]      && export HOSTNAME=$(hostname)
-  # make sure /usr/bin/id is available
-  if [[ -x /usr/bin/id ]] ; then
-     [[ -z "$USER" ]]          && export USER=$(/usr/bin/id -un)
-     [[ $LOGNAME == LOGIN ]] && LOGNAME=$(/usr/bin/id -un)
-  fi
+export HOSTNAME=${HOSTNAME:-$(hostname)}
+
+# make sure /usr/bin/id is available
+if [[ -x /usr/bin/id ]] ; then
+    [[ -z "$USER" ]]          && export USER=$(/usr/bin/id -un)
+    [[ $LOGNAME == LOGIN ]] && LOGNAME=$(/usr/bin/id -un)
+fi
 
 # workaround for live-cd mode as $HOME is not set via rungetty
-  if [[ -f /etc/grml_cd ]] ; then
+if [[ -f /etc/grml_cd ]] ; then
     if (( EUID == 0 )); then
-       export HOME=/root
+        export HOME=/root
     else
-       export HOME=/home/$USER
+        export HOME=/home/$USER
     fi
-  fi
+fi
 
 # set $PATH
 # gentoo users have to source /etc/profile.env
-  if [[ -r /etc/gentoo-release ]] ; then
-     [[ -r /etc/profile.env ]] && source /etc/profile.env
-       if (( EUID != 0 )); then
-          PATH="$HOME/bin:/bin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/games:/usr/NX/bin:$PATH"
-       else
-          PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/NX/bin:$PATH"
-       fi
-  else
-    # support extra software in special directory outside of squashfs environment in live-cd mode
+if [[ -r /etc/gentoo-release ]] ; then
+
+    [[ -r /etc/profile.env ]] && source /etc/profile.env
+
+    if (( EUID != 0 )); then
+        PATH="$HOME/bin:/bin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/games:/usr/NX/bin:$PATH"
+    else
+        PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/NX/bin:$PATH"
+    fi
+else
+# support extra software in special directory outside of squashfs environment in live-cd mode
     if [[ -f /etc/grml_cd ]] ; then
-       [[ -d /cdrom/addons/ ]] && ADDONS=':/cdrom/addons/'
+        [[ -d /cdrom/addons/ ]] && ADDONS=':/cdrom/addons/'
     fi
+
     if (( EUID != 0 )); then
-      PATH="$HOME/bin:/bin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/games:/usr/NX/bin$ADDONS"
+        PATH="$HOME/bin:/bin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/games:/usr/NX/bin$ADDONS"
     else
-      PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/NX/bin$ADDONS"
+        PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/NX/bin$ADDONS"
     fi
-  fi
+fi
 
-  # Solaris 
-  # case $(uname 2>/dev/null) in
-  #   SunOS)
-  #      PATH="/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/sfw/bin:/opt/sfw/bin:/opt/bin:/usr/local/bin:/usr/openwin/bin:/usr/dt/bin:/usr/ucb:/usr/proc/bin:~/bin"
-  #      # LD_LIBRARY_PATH="/opt/csw/lib:/opt/sfw/lib:/usr/lib:/usr/local/lib:/usr/ccs/lib:/usr/openwin/lib:/usr/ucb/lib"
-  #      # MANPATH="$MANPATH:/opt/csw/man:/usr/man:/usr/share/man:/usr/local/man:/opt/sfw/man"
-  #esac
+# Solaris 
+# case $(uname 2>/dev/null) in
+#   SunOS)
+#      PATH="/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/sfw/bin:/opt/sfw/bin:/opt/bin:/usr/local/bin:/usr/openwin/bin:/usr/dt/bin:/usr/ucb:/usr/proc/bin:~/bin"
+#      # LD_LIBRARY_PATH="/opt/csw/lib:/opt/sfw/lib:/usr/lib:/usr/local/lib:/usr/ccs/lib:/usr/openwin/lib:/usr/ucb/lib"
+#      # MANPATH="$MANPATH:/opt/csw/man:/usr/man:/usr/share/man:/usr/local/man:/opt/sfw/man"
+#esac
 
 # less (:=pager) options:
 #  export LESS=C
-  if [[ -x /usr/bin/lesspipe.sh ]] ; then
-     export LESSOPEN="|lesspipe.sh %s"
-  elif [[ -x /usr/bin/lesspipe ]] ; then
-     export LESSOPEN="|lesspipe %s"
-  fi
-  export READNULLCMD=${PAGER:-/usr/bin/pager}
+if [[ -x /usr/bin/lesspipe.sh ]] ; then
+    export LESSOPEN="|lesspipe.sh %s"
+elif [[ -x /usr/bin/lesspipe ]] ; then
+    export LESSOPEN="|lesspipe %s"
+fi
+export READNULLCMD=${PAGER:-/usr/bin/pager}
 
 # support termcap colors when using PAGER=less:
-  export LESS_TERMCAP_mb=$'\E[01;31m'
-  export LESS_TERMCAP_md=$'\E[01;31m'
-  export LESS_TERMCAP_me=$'\E[0m'
-  export LESS_TERMCAP_se=$'\E[0m'
-  export LESS_TERMCAP_so=$'\E[01;44;33m'
-  export LESS_TERMCAP_ue=$'\E[0m'
-  export LESS_TERMCAP_us=$'\E[01;32m'
+# TODO: move these to zshrc, they are only relevant in interactive shells
+export LESS_TERMCAP_mb=$'\E[01;31m'
+export LESS_TERMCAP_md=$'\E[01;31m'
+export LESS_TERMCAP_me=$'\E[0m'
+export LESS_TERMCAP_se=$'\E[0m'
+export LESS_TERMCAP_so=$'\E[01;44;33m'
+export LESS_TERMCAP_ue=$'\E[0m'
+export LESS_TERMCAP_us=$'\E[01;32m'
 
 # allow zeroconf for distcc
-  export DISTCC_HOSTS="+zeroconf"
+export DISTCC_HOSTS="+zeroconf"
 
 # MAKEDEV should be usable on udev as well by default:
-  export WRITE_ON_UDEV=yes
+export WRITE_ON_UDEV=yes
 
 ## END OF FILE #################################################################
index db7173f..acf9072 100644 (file)
 
 # zsh profiling {{{
 # just execute 'ZSH_PROFILE_RC=1 zsh' and run 'zprof' to get the details
-  if [[ -n $ZSH_PROFILE_RC ]] ; then
-     zmodload zsh/zprof
-  fi
+if [[ -n $ZSH_PROFILE_RC ]] ; then
+    zmodload zsh/zprof
+fi
 # }}}
 
+# utility functions {{{
+# this function checks if a command exists and returns either true
+# or false. This avoids using 'which' and 'whence', which will
+# avoid problems with aliases for which on certain weird systems. :-)
+check_com() {
+    local -i comonly
+
+    if [[ ${1} == '-c' ]] ; then
+        (( comonly = 1 ))
+        shift
+    else
+        (( comonly = 0 ))
+    fi
+
+    if (( ${#argv} != 1 )) ; then
+        printf 'usage: check_com [-c] <command>\n' >&2
+        return 1
+    fi
+
+    if (( comonly > 0 )) ; then
+        [[ -n ${commands[$1]}  ]] && return 0
+        return 1
+    fi
+
+    if   [[ -n ${commands[$1]}  ]] \
+      || [[ -n ${functions[$1]} ]] \
+      || [[ -n ${aliases[$1]}   ]] \
+      || [[ -n ${reswords[$1]}  ]] ; then
+
+        return 0
+    fi
+
+    return 1
+}
+
+# creates an alias and precedes the command with
+# sudo if $EUID is not zero.
+salias() {
+    local only=0 ; local multi=0
+    while [[ ${1} == -* ]] ; do
+        case ${1} in
+            (-o) only=1 ;;
+            (-a) multi=1 ;;
+            (--) shift ; break ;;
+            (-h)
+                printf 'usage: salias [-h|-o|-a] <alias-expression>\n'
+                printf '  -h      shows this help text.\n'
+                printf '  -a      replace '\'' ; '\'' sequences with '\'' ; sudo '\''.\n'
+                printf '          be careful using this option.\n'
+                printf '  -o      only sets an alias if a preceding sudo would be needed.\n'
+                return 0
+                ;;
+            (*) printf "unkown option: '%s'\n" "${1}" ; return 1 ;;
+        esac
+        shift
+    done
+
+    if (( ${#argv} > 1 )) ; then
+        printf 'Too many arguments %s\n' "${#argv}"
+        return 1
+    fi
+
+    key="${1%%\=*}" ;  val="${1#*\=}"
+    if (( EUID == 0 )) && (( only == 0 )); then
+        alias -- "${key}=${val}"
+    elif (( EUID > 0 )) ; then
+        (( multi > 0 )) && val="${val// ; / ; sudo }"
+        alias -- "${key}=sudo ${val}"
+    fi
+
+    return 0
+}
+
+# Check if we can read given files and source those we can.
+xsource() {
+    if (( ${#argv} < 1 )) ; then
+        printf 'usage: xsource FILE(s)...\n' >&2
+        return 1
+    fi
+
+    while (( ${#argv} > 0 )) ; do
+        [[ -r ${1} ]] && source ${1}
+        shift
+    done
+    return 0
+}
+
+# Check if we can read a given file and 'cat(1)' it.
+xcat() {
+    if (( ${#argv} != 1 )) ; then
+        printf 'usage: xcat FILE\n' >&2
+        return 1
+    fi
+
+    [[ -r ${1} ]] && cat ${1}
+    return 0
+}
+
+# Remove these functions again, they are of use only in these
+# setup files. This should be called at the end of .zshrc.
+xunfunction() {
+    local -a funcs
+    funcs=(check_com salias xcat xsource xunfunction)
+
+    for func in $funcs ; do
+        [[ -n ${functions[$func]} ]] \
+            && unfunction $func
+    done
+    return 0
+}
+#}}}
+
 # locale setup {{{
-  if [[ -n "$LANG" ]] ; then
-     export LANG
-  else
-     [[ -r /etc/default/locale ]] && source /etc/default/locale
-  fi
-  [[ -n "$LANG" ]]          && export LANG || export LANG="en_US.iso885915"
-  [[ -n "$LC_ALL" ]]        && export LC_ALL
-  [[ -n "$LC_MESSAGES" ]]   && export LC_MESSAGES
+if [[ -z "$LANG" ]] ; then
+    xsource "/etc/default/locale"
+fi
 
-  [[ -r /etc/sysconfig/keyboard ]] && source /etc/sysconfig/keyboard
-  [[ -r /etc/timezone ]] && TZ=$(cat /etc/timezone)
+export LANG=${LANG:-en_US.iso885915}
+for var in LC_ALL LC_MESSAGES ; do
+    [[ -n ${(P)var} ]] && export $var
+done
+
+xsource "/etc/sysconfig/keyboard"
+
+TZ=$(xcat /etc/timezone)
 # }}}
 
 # check for potentially old files in 'completion.d' {{{
-  setopt extendedglob
-  xof=(/etc/zsh/completion.d/*~/etc/zsh/completion.d/_*(N))
-  if (( ${#xof} > 0 )) ; then
+setopt extendedglob
+xof=(/etc/zsh/completion.d/*~/etc/zsh/completion.d/_*(N))
+if (( ${#xof} > 0 )) ; then
     printf '\n -!- INFORMATION\n\n'
     printf ' -!- %s file(s) not starting with an underscore (_) found in\n' ${#xof}
     printf ' -!- /etc/zsh/completion.d/.\n\n'
     printf ' -!- Note, that this message will *not* go away, unless you yourself\n'
     printf ' -!- resolve the situation manually.\n\n'
     BROKEN_COMPLETION_DIR=1
-  fi
-  unset xof
+fi
+unset xof
 # }}}
 
 # {{{ check for version/system
 # 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
+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(){
-      [[ $ZSH_VERSION == 4.* ]] && return 0
-      return 1
+        [[ $ZSH_VERSION == 4.* ]] && return 0
+        return 1
     }
     is42(){
-      [[ $ZSH_VERSION == 4.<2->* ]] && return 0
-      return 1
+        [[ $ZSH_VERSION == 4.<2->* ]] && return 0
+        return 1
     }
-  fi
+fi
 
-# grml specific stuff
 #f1# Checks whether or not you're running grml
-  isgrml(){
+isgrml(){
     [[ -f /etc/grml_version ]] && return 0
     return 1
-  }
+}
 
 #f1# Checks whether or not you're running a grml cd
-  isgrmlcd(){
+isgrmlcd(){
     [[ -f /etc/grml_cd ]] && return 0
     return 1
-  }
+}
 
-  if isgrml ; then
-  #f1# Checks whether or not you're running grml-small
+if isgrml ; then
+#f1# Checks whether or not you're running grml-small
     isgrmlsmall() {
-    [[ ${${${(f)"$(</etc/grml_version)"}%% *}##*-} == 'small' ]] && return 0 ; return 1
+        [[ ${${${(f)"$(</etc/grml_version)"}%% *}##*-} == 'small' ]] && return 0 ; return 1
     }
-  else
+else
     isgrmlsmall() { return 1 }
-  fi
+fi
 
 #f1# are we running within an utf environment?
-  isutfenv() {
+isutfenv() {
     case "$LANG $CHARSET $LANGUAGE" in
-      *utf*) return 0 ;;
-      *UTF*) return 0 ;;
-      *)     return 1 ;;
+        *utf*) return 0 ;;
+        *UTF*) return 0 ;;
+        *)     return 1 ;;
     esac
-  }
+}
 
 # check for user, if not running as root set $SUDO to sudo
- (( EUID != 0 )) && SUDO='sudo' || SUDO=''
-
-  salias() {
-    # creates an alias and precedes the command with
-    # sudo if $EUID is not zero.
-    local only=0 ; local multi=0
-    while [[ ${1} == -* ]] ; do
-      case ${1} in
-        (-o) only=1 ;;
-        (-a) multi=1 ;;
-        (--) shift ; break ;;
-        (-h)
-          printf 'usage: salias [-h|-o|-a] <alias-expression>\n'
-          printf '  -h      shows this help text.\n'
-          printf '  -a      replace '\'' ; '\'' sequences with '\'' ; sudo '\''.\n'
-          printf '          be careful using this option.\n'
-          printf '  -o      only sets an alias if a preceding sudo would be needed.\n'
-          return 0
-          ;;
-        (*) printf "unkown option: '%s'\n" "${1}" ; return 1 ;;
-      esac
-      shift
-    done
-    if (( ${#argv} > 1 )) ; then
-      printf 'Too many arguments %s\n' "${#argv}"
-      return 1
-    fi
-    key="${1%%\=*}" ;  val="${1#*\=}"
-    if (( EUID == 0 )) && (( only == 0 )); then
-      alias -- "${key}=${val}"
-    elif (( EUID > 0 )) ; then
-      (( multi > 0 )) && val="${val// ; / ; sudo }"
-      alias -- "${key}=sudo ${val}"
-    fi
-    return 0
-  }
+(( EUID != 0 )) && SUDO='sudo' || SUDO=''
 
 # change directory to home on first invocation of zsh
 # important for rungetty -> autologin
 # Thanks go to Bart Schaefer!
-  isgrml && checkhome() {
-  if [[ -z "$ALREADY_DID_CD_HOME" ]] ; then
-     export ALREADY_DID_CD_HOME=$HOME
-     cd
-  fi
-  }
+isgrml && checkhome() {
+    if [[ -z "$ALREADY_DID_CD_HOME" ]] ; then
+        export ALREADY_DID_CD_HOME=$HOME
+        cd
+    fi
+}
 # }}}
 
 # {{{ set some variables
-  #v#
-  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`
-
-  # 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
-     [[ -d /etc/zsh/completion.d ]] && fpath+=( /etc/zsh/completion.d )
-     if [[ -d /etc/zsh/functions.d ]] ; then
-       fpath+=( /etc/zsh/functions.d )
-       for func in /etc/zsh/functions.d/[^_]*[^~] ; do
-         autoload -U ${func:t}
-       done
-     fi
-  fi
+#v#
+if check_com -c vim ; 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:
+check_com -c dircolors && eval $(dircolors -b)
+
+# 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
+    [[ -d /etc/zsh/completion.d ]] && fpath+=( /etc/zsh/completion.d )
+    if [[ -d /etc/zsh/functions.d ]] ; then
+        fpath+=( /etc/zsh/functions.d )
+        for func in /etc/zsh/functions.d/[^_]*[^~] ; do
+            autoload -U ${func:t}
+        done
+    fi
+fi
 
-  # automatically remove duplicates from these arrays
-  typeset -U path cdpath fpath manpath
+# automatically remove duplicates from these arrays
+typeset -U path cdpath fpath manpath
 # }}}
 
 # {{{ keybindings
- if [[ "$TERM" != emacs ]] ; then
-  [[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char
-  [[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
-  [[ -z "$terminfo[kend]"  ]] || bindkey -M emacs "$terminfo[kend]"  end-of-line
-  [[ -z "$terminfo[kdch1]" ]] || bindkey -M vicmd "$terminfo[kdch1]" vi-delete-char
-  [[ -z "$terminfo[khome]" ]] || bindkey -M vicmd "$terminfo[khome]" vi-beginning-of-line
-  [[ -z "$terminfo[kend]"  ]] || bindkey -M vicmd "$terminfo[kend]"  vi-end-of-line
-  [[ -z "$terminfo[cuu1]"  ]] || bindkey -M viins "$terminfo[cuu1]"  vi-up-line-or-history
-  [[ -z "$terminfo[cuf1]"  ]] || bindkey -M viins "$terminfo[cuf1]"  vi-forward-char
-  [[ -z "$terminfo[kcuu1]" ]] || bindkey -M viins "$terminfo[kcuu1]" vi-up-line-or-history
-  [[ -z "$terminfo[kcud1]" ]] || bindkey -M viins "$terminfo[kcud1]" vi-down-line-or-history
-  [[ -z "$terminfo[kcuf1]" ]] || bindkey -M viins "$terminfo[kcuf1]" vi-forward-char
-  [[ -z "$terminfo[kcub1]" ]] || bindkey -M viins "$terminfo[kcub1]" vi-backward-char
-  # ncurses stuff:
-  [[ "$terminfo[kcuu1]" == $'\eO'* ]] && bindkey -M viins "${terminfo[kcuu1]/O/[}" vi-up-line-or-history
-  [[ "$terminfo[kcud1]" == $'\eO'* ]] && bindkey -M viins "${terminfo[kcud1]/O/[}" vi-down-line-or-history
-  [[ "$terminfo[kcuf1]" == $'\eO'* ]] && bindkey -M viins "${terminfo[kcuf1]/O/[}" vi-forward-char
-  [[ "$terminfo[kcub1]" == $'\eO'* ]] && bindkey -M viins "${terminfo[kcub1]/O/[}" vi-backward-char
-  [[ "$terminfo[khome]" == $'\eO'* ]] && bindkey -M viins "${terminfo[khome]/O/[}" beginning-of-line
-  [[ "$terminfo[kend]"  == $'\eO'* ]] && bindkey -M viins "${terminfo[kend]/O/[}"  end-of-line
-  [[ "$terminfo[khome]" == $'\eO'* ]] && bindkey -M emacs "${terminfo[khome]/O/[}" beginning-of-line
-  [[ "$terminfo[kend]"  == $'\eO'* ]] && bindkey -M emacs "${terminfo[kend]/O/[}"  end-of-line
+if [[ "$TERM" != emacs ]] ; then
+    [[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char
+    [[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
+    [[ -z "$terminfo[kend]"  ]] || bindkey -M emacs "$terminfo[kend]"  end-of-line
+    [[ -z "$terminfo[kdch1]" ]] || bindkey -M vicmd "$terminfo[kdch1]" vi-delete-char
+    [[ -z "$terminfo[khome]" ]] || bindkey -M vicmd "$terminfo[khome]" vi-beginning-of-line
+    [[ -z "$terminfo[kend]"  ]] || bindkey -M vicmd "$terminfo[kend]"  vi-end-of-line
+    [[ -z "$terminfo[cuu1]"  ]] || bindkey -M viins "$terminfo[cuu1]"  vi-up-line-or-history
+    [[ -z "$terminfo[cuf1]"  ]] || bindkey -M viins "$terminfo[cuf1]"  vi-forward-char
+    [[ -z "$terminfo[kcuu1]" ]] || bindkey -M viins "$terminfo[kcuu1]" vi-up-line-or-history
+    [[ -z "$terminfo[kcud1]" ]] || bindkey -M viins "$terminfo[kcud1]" vi-down-line-or-history
+    [[ -z "$terminfo[kcuf1]" ]] || bindkey -M viins "$terminfo[kcuf1]" vi-forward-char
+    [[ -z "$terminfo[kcub1]" ]] || bindkey -M viins "$terminfo[kcub1]" vi-backward-char
+    # ncurses stuff:
+    [[ "$terminfo[kcuu1]" == $'\eO'* ]] && bindkey -M viins "${terminfo[kcuu1]/O/[}" vi-up-line-or-history
+    [[ "$terminfo[kcud1]" == $'\eO'* ]] && bindkey -M viins "${terminfo[kcud1]/O/[}" vi-down-line-or-history
+    [[ "$terminfo[kcuf1]" == $'\eO'* ]] && bindkey -M viins "${terminfo[kcuf1]/O/[}" vi-forward-char
+    [[ "$terminfo[kcub1]" == $'\eO'* ]] && bindkey -M viins "${terminfo[kcub1]/O/[}" vi-backward-char
+    [[ "$terminfo[khome]" == $'\eO'* ]] && bindkey -M viins "${terminfo[khome]/O/[}" beginning-of-line
+    [[ "$terminfo[kend]"  == $'\eO'* ]] && bindkey -M viins "${terminfo[kend]/O/[}"  end-of-line
+    [[ "$terminfo[khome]" == $'\eO'* ]] && bindkey -M emacs "${terminfo[khome]/O/[}" beginning-of-line
+    [[ "$terminfo[kend]"  == $'\eO'* ]] && bindkey -M emacs "${terminfo[kend]/O/[}"  end-of-line
 fi
 
 ## keybindings (run 'bindkeys' for details, more details via man zshzle)
 # use emacs style per default:
-  bindkey -e
+bindkey -e
 # use vi style:
 # bindkey -v
 
 #if [[ "$TERM" == screen ]] ; then
-  bindkey '\e[1~' beginning-of-line       # home
-  bindkey '\e[4~' end-of-line             # end
-  bindkey '\e[A'  up-line-or-search       # cursor up
-  bindkey '\e[B'  down-line-or-search     # <ESC>-
-  bindkey '^x'    history-beginning-search-backward # alternative ways of searching the shell history
+bindkey '\e[1~' beginning-of-line       # home
+bindkey '\e[4~' end-of-line             # end
+bindkey '\e[A'  up-line-or-search       # cursor up
+bindkey '\e[B'  down-line-or-search     # <ESC>-
+bindkey '^x'    history-beginning-search-backward # alternative ways of searching the shell history
 # bindkey -s '^L' "|less\n"             # ctrl-L pipes to less
 # bindkey -s '^B' " &\n"                # ctrl-B runs it in the background
 # if terminal type is set to 'rxvt':
-  bindkey '\e[7~' beginning-of-line       # home
-  bindkey '\e[8~' end-of-line             # end
+bindkey '\e[7~' beginning-of-line       # home
+bindkey '\e[8~' end-of-line             # end
 #fi
 
 # insert unicode character
 # usage example: 'ctrl-x i' 00A7 'ctrl-x i' will give you an Â§
 # See for example http://unicode.org/charts/ for unicode characters code
-  autoload insert-unicode-char
-  zle -N insert-unicode-char
-  #k# Insert Unicode character
-  bindkey '^Xi' insert-unicode-char
+autoload insert-unicode-char
+zle -N insert-unicode-char
+#k# Insert Unicode character
+bindkey '^Xi' insert-unicode-char
 
 # just type 'cd ...' to get 'cd ../..'
 #  rationalise-dot() {
@@ -342,170 +419,173 @@ fi
 # see http://zshwiki.org/home/examples/zleiab for details
 # less risky than the global aliases but powerful as well
 # just type the abbreviation key and afterwards ',.' to expand it
-  declare -A abk
-  setopt extendedglob
-  setopt interactivecomments
-  abk=(
-   # key  # value                (#d additional doc string)
+declare -A abk
+setopt extendedglob
+setopt interactivecomments
+abk=(
+# key  # value                (#d additional doc string)
 #A# start
-   '...' '../..'
-   '....' '../../..'
-   'BG' '& exit'
-   'C' '| wc -l'
-   'G' '|& grep --color=auto'
-   'H' '| head'
-   'Hl' ' --help |& less -r'      #d (Display help in pager)
-   'L' '| less'
-   'LL' '|& less -r'
-   'M' '| most'
-   'N' '&>/dev/null'              #d (No Output)
-   'R' '| tr A-z N-za-m'          #d (ROT13)
-   'SL' '| sort | less'
-   'S' '| sort -u'
-   'T' '| tail'
-   'V' '|& vim -'
+    '...' '../..'
+    '....' '../../..'
+    'BG' '& exit'
+    'C' '| wc -l'
+    'G' '|& grep --color=auto'
+    'H' '| head'
+    'Hl' ' --help |& less -r'      #d (Display help in pager)
+    'L' '| less'
+    'LL' '|& less -r'
+    'M' '| most'
+    'N' '&>/dev/null'              #d (No Output)
+    'R' '| tr A-z N-za-m'          #d (ROT13)
+    'SL' '| sort | less'
+    'S' '| sort -u'
+    'T' '| tail'
+    'V' '|& vim -'
 #A# end
-   'hide' "echo -en '\033]50;nil2\007'"
-   'tiny' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-80-*-*-c-*-iso8859-15\007"'
-   'small' 'echo -en "\033]50;6x10\007"'
-   'medium' 'echo -en "\033]50;-misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-15\007"'
-   'default' 'echo -e "\033]50;-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-15\007"'
-   'large' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso8859-15\007"'
-   'huge' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15\007"'
-   'smartfont' 'echo -en "\033]50;-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*\007"'
-   'semifont' 'echo -en "\033]50;-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15\007"'
-   'da' 'du -sch'
-   'j' 'jobs -l'
-   'u' 'translate -i'
-   'co' "./configure && make && sudo make install"
-   'CH' "./configure --help"
-   'conkeror' 'firefox -chrome chrome://conkeror/content'
-   'dir' 'ls -lSrah'
-   'lad' $'ls -d .*(/)\n# only show dot-directories'
-   'lsa' $'ls -a .*(.)\n# only show dot-files'
-   'lss' $'ls -l *(s,S,t)\n# only files with setgid/setuid/sticky flag'
-   'lsl' $'ls -l *(@[1,10])\n# only symlinks'
-   'lsx' $'ls -l *(*[1,10])\n# only executables'
-   'lsw' $'ls -ld *(R,W,X.^ND/)\n# world-{readable,writable,executable} files'
-   'lsbig' $'ls -flh *(.OL[1,10])\n# display the biggest files'
-   'lsd' $'ls -d *(/)\n# only show directories'
-   'lse' $'ls -d *(/^F)\n# only show empty directories'
-   'lsnew' $'ls -rl *(D.om[1,10])\n# display the newest files'
-   'lsold' $'ls -rtlh *(D.om[-11,-1])\n # display the oldest files'
-   'lssmall' $'ls -Srl *(.oL[1,10])\n# display the smallest files'
-   'rw-' 'chmod 600'
-   '600' 'chmod u+rw-x,g-rwx,o-rwx'
-   'rwx' 'chmod u+rwx'
-   '700' 'chmod u+rwx,g-rwx,o-rwx'
-   'r--' 'chmod u+r-wx,g-rwx,o-rwx'
-   '644' $'chmod u+rw-x,g+r-wx,o+r-wx\n # 4=r,2=w,1=x'
-   '755' 'chmod u+rwx,g+r-w+x,o+r-w+x'
-   'md' 'mkdir -p '
-   'cmplayer' 'mplayer -vo -fs -zoom fbdev'
-   'fbmplayer' 'mplayer -vo -fs -zoom fbdev'
-   'fblinks' 'links2 -driver fb'
-   'insecssh' 'ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
-   'insecscp' 'scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
-   'fori' 'for i ({..}) { }'
-   'cx' 'chmod +x'
-   'e'  'print -l'
-   'se' 'setopt interactivecomments'
-   'va' 'valac --vapidir=../vapi/ --pkg=gtk+-2.0 gtktest.vala'
-   'fb2' '=mplayer -vo fbdev -fs -zoom 1>/dev/null -xy 2'
-   'fb3' '=mplayer -vo fbdev -fs  -zoom 1>/dev/null -xy 3'
-   'ci' 'centericq'
-   'D'  'export DISPLAY=:0.0'
-   'mp' 'mplayer -vo xv -fs -zoom'
-  )
-
-  globalias () {
-        local MATCH
-        matched_chars='[.-|_a-zA-Z0-9]#'
-        LBUFFER=${LBUFFER%%(#m)[.-|_a-zA-Z0-9]#}
-        LBUFFER+=${abk[$MATCH]:-$MATCH}
-  }
+    'hide' "echo -en '\033]50;nil2\007'"
+    'tiny' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-80-*-*-c-*-iso8859-15\007"'
+    'small' 'echo -en "\033]50;6x10\007"'
+    'medium' 'echo -en "\033]50;-misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-15\007"'
+    'default' 'echo -e "\033]50;-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-15\007"'
+    'large' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso8859-15\007"'
+    'huge' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15\007"'
+    'smartfont' 'echo -en "\033]50;-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*\007"'
+    'semifont' 'echo -en "\033]50;-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15\007"'
+    'da' 'du -sch'
+    'j' 'jobs -l'
+    'u' 'translate -i'
+    'co' "./configure && make && sudo make install"
+    'CH' "./configure --help"
+    'conkeror' 'firefox -chrome chrome://conkeror/content'
+    'dir' 'ls -lSrah'
+    'lad' $'ls -d .*(/)\n# only show dot-directories'
+    'lsa' $'ls -a .*(.)\n# only show dot-files'
+    'lss' $'ls -l *(s,S,t)\n# only files with setgid/setuid/sticky flag'
+    'lsl' $'ls -l *(@[1,10])\n# only symlinks'
+    'lsx' $'ls -l *(*[1,10])\n# only executables'
+    'lsw' $'ls -ld *(R,W,X.^ND/)\n# world-{readable,writable,executable} files'
+    'lsbig' $'ls -flh *(.OL[1,10])\n# display the biggest files'
+    'lsd' $'ls -d *(/)\n# only show directories'
+    'lse' $'ls -d *(/^F)\n# only show empty directories'
+    'lsnew' $'ls -rl *(D.om[1,10])\n# display the newest files'
+    'lsold' $'ls -rtlh *(D.om[-11,-1])\n # display the oldest files'
+    'lssmall' $'ls -Srl *(.oL[1,10])\n# display the smallest files'
+    'rw-' 'chmod 600'
+    '600' 'chmod u+rw-x,g-rwx,o-rwx'
+    'rwx' 'chmod u+rwx'
+    '700' 'chmod u+rwx,g-rwx,o-rwx'
+    'r--' 'chmod u+r-wx,g-rwx,o-rwx'
+    '644' $'chmod u+rw-x,g+r-wx,o+r-wx\n # 4=r,2=w,1=x'
+    '755' 'chmod u+rwx,g+r-w+x,o+r-w+x'
+    'md' 'mkdir -p '
+    'cmplayer' 'mplayer -vo -fs -zoom fbdev'
+    'fbmplayer' 'mplayer -vo -fs -zoom fbdev'
+    'fblinks' 'links2 -driver fb'
+    'insecssh' 'ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
+    'insecscp' 'scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
+    'fori' 'for i ({..}) { }'
+    'cx' 'chmod +x'
+    'e'  'print -l'
+    'se' 'setopt interactivecomments'
+    'va' 'valac --vapidir=../vapi/ --pkg=gtk+-2.0 gtktest.vala'
+    'fb2' '=mplayer -vo fbdev -fs -zoom 1>/dev/null -xy 2'
+    'fb3' '=mplayer -vo fbdev -fs  -zoom 1>/dev/null -xy 3'
+    'ci' 'centericq'
+    'D'  'export DISPLAY=:0.0'
+    'mp' 'mplayer -vo xv -fs -zoom'
+)
+
+globalias() {
+    local MATCH
+    matched_chars='[.-|_a-zA-Z0-9]#'
+    LBUFFER=${LBUFFER%%(#m)[.-|_a-zA-Z0-9]#}
+    LBUFFER+=${abk[$MATCH]:-$MATCH}
+}
 
-  zle -N globalias
-  bindkey ",." globalias
+zle -N globalias
+bindkey ",." globalias
 # }}}
 
 # {{{ autoloading
-  autoload -U zmv    # who needs mmv or rename?
-  autoload history-search-end
-
-  # we don't want to quote/espace URLs on our own...
-  # if autoload -U url-quote-magic ; then
-  #    zle -N self-insert url-quote-magic
-  #    zstyle ':url-quote-magic:*' url-metas '*?[]^()~#{}='
-  # else
-  #    print 'Notice: no url-quote-magic available :('
-  # fi
-  alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magic'
-
-  #m# k ESC-h Call \kbd{run-help} for the 1st word on the command line
-  alias run-help >&/dev/null && unalias run-help
-  autoload run-help # use via 'esc-h'
+autoload -U zmv    # who needs mmv or rename?
+autoload history-search-end
+
+# we don't want to quote/espace URLs on our own...
+# if autoload -U url-quote-magic ; then
+#    zle -N self-insert url-quote-magic
+#    zstyle ':url-quote-magic:*' url-metas '*?[]^()~#{}='
+# else
+#    print 'Notice: no url-quote-magic available :('
+# fi
+alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magic'
+
+#m# k ESC-h Call \kbd{run-help} for the 1st word on the command line
+alias run-help >&/dev/null && unalias run-help
+autoload run-help # use via 'esc-h'
 
 # completion system
-  if autoload -U compinit && compinit 2>/dev/null ; then
-     compinit 2>/dev/null || print 'Notice: no compinit available :('
-   else
-     print 'Notice: no compinit available :('
-     function zstyle { }
-     function compdef { }
-  fi
+if autoload -U compinit && compinit 2>/dev/null ; then
+    compinit 2>/dev/null || print 'Notice: no compinit available :('
+else
+    print 'Notice: no compinit available :('
+    function zstyle { }
+    function compdef { }
+fi
 
-  is4 && autoload -U zed # use ZLE editor to edit a file or function
+is4 && autoload -U zed # use ZLE editor to edit a file or function
 
-  is4 && for mod in complist deltochar mathfunc ; do
-             zmodload -i zsh/${mod} 2>/dev/null || print "Notice: no ${mod} available :("
-         done
+is4 && \
+for mod in complist deltochar mathfunc ; do
+    zmodload -i zsh/${mod} 2>/dev/null || print "Notice: no ${mod} available :("
+done
 
 # autoload zsh modules when they are referenced
-  if is4 ; then
+if is4 ; then
     tmpargs=(
-      a   stat
-      a   zpty
-      ap  zprof
-      ap  mapfile
+        a   stat
+        a   zpty
+        ap  zprof
+        ap  mapfile
     )
 
     while (( ${#tmpargs} > 0 )) ; do
-      zmodload -${tmpargs[1]} zsh/${tmpargs[2]} ${tmpargs[2]}
-      shift 2 tmpargs
+        zmodload -${tmpargs[1]} zsh/${tmpargs[2]} ${tmpargs[2]}
+        shift 2 tmpargs
     done
     unset tmpargs
-  fi
+fi
 
-  is4 && autoload -U insert-files && \
-  zle -N insert-files && \
-  #k# Insert files
-  bindkey "^Xf" insert-files # C-x-f
+if is4 && autoload -U insert-files && zle -N insert-files ; then
+    #k# Insert files
+    bindkey "^Xf" insert-files # C-x-f
+fi
 
-  bindkey ' '   magic-space    # also do history expansion on space
-  #k# Trigger menu-complete
-  bindkey '\ei' menu-complete  # menu completion via esc-i
+bindkey ' '   magic-space    # also do history expansion on space
+#k# Trigger menu-complete
+bindkey '\ei' menu-complete  # menu completion via esc-i
 
 # press esc-e for editing command line in $EDITOR or $VISUAL
-  is4 && autoload -U edit-command-line && \
-  zle -N edit-command-line && \
-  #k# Edit the current line in \kbd{\$EDITOR}
-  bindkey '\ee' edit-command-line
+if is4 && autoload -U edit-command-line && zle -N edit-command-line ; then
+    #k# Edit the current line in \kbd{\$EDITOR}
+    bindkey '\ee' edit-command-line
+fi
 
 #k# menu selection: pick item but stay in the menu
-  is4 && bindkey -M menuselect '\e^M' accept-and-menu-complete
+is4 && bindkey -M menuselect '\e^M' accept-and-menu-complete
 
 # press "ctrl-e d" to insert the actual date in the form yyyy-mm-dd
-  _bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; }
-  #k# Insert a timestamp on the command line (yyyy-mm-dd)
-  bindkey '^Ed' _bkdate
-  zle -N _bkdate
+_bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; }
+zle -N _bkdate
+
+#k# Insert a timestamp on the command line (yyyy-mm-dd)
+bindkey '^Ed' _bkdate
 
 # press esc-m for inserting last typed word again (thanks to caphuso!)
-  insert-last-typed-word() { zle insert-last-word -- 0 -1 }; \
-  zle -N insert-last-typed-word;
-  #k# Insert last typed word
-  bindkey "\em" insert-last-typed-word
+insert-last-typed-word() { zle insert-last-word -- 0 -1 };
+zle -N insert-last-typed-word;
+
+#k# Insert last typed word
+bindkey "\em" insert-last-typed-word
 
 # set command prediction from history, see 'man 1 zshcontrib'
 #  is4 && autoload -U predict-on && \
@@ -515,7 +595,7 @@ fi
 #  bindkey "^Z" predict-off
 
 #k# Shortcut for \kbd{fg<enter>}
-  bindkey -s '^z' "fg\n"
+bindkey -s '^z' "fg\n"
 
 # press ctrl-q to quote line:
 #  mquote () {
@@ -528,27 +608,30 @@ fi
 #  zle -N mquote && bindkey '^q' mquote
 
 # run command line as user root via sudo:
-  sudo-command-line() {
+sudo-command-line() {
     [[ -z $BUFFER ]] && zle up-history
     [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
-  }
-  zle -N sudo-command-line
+}
+zle -N sudo-command-line
+
 #k# Put the current command line into a \kbd{sudo} call
-  bindkey "^Os" sudo-command-line
+bindkey "^Os" sudo-command-line
 
 ### jump behind the first word on the cmdline.
 ### useful to add options.
-  function jump_after_first_word() {
+function jump_after_first_word() {
     local words
     words=(${(z)BUFFER})
+
     if (( ${#words} <= 1 )) ; then
-      CURSOR=${#BUFFER}
+        CURSOR=${#BUFFER}
     else
-      CURSOR=${#${words[1]}}
+        CURSOR=${#${words[1]}}
     fi
-  }
-  zle -N jump_after_first_word
-  bindkey '^x1' jump_after_first_word
+}
+zle -N jump_after_first_word
+
+bindkey '^x1' jump_after_first_word
 
 # }}}
 
@@ -558,40 +641,40 @@ fi
 #o# r_umaskstr  rwxrwxr-x
 #o# umask       022
 #o# umaskstr    rwxr-xr-x
-  (( EUID != 0 )) && umask 002 || umask 022
+(( EUID != 0 )) && umask 002 || umask 022
 
 # history:
-  setopt append_history       # append history list to the history file (important for multiple parallel zsh sessions!)
-  is4 && setopt SHARE_HISTORY # import new commands from the history file also in other zsh-session
-  setopt extended_history     # save each command's beginning timestamp and the duration to the history file
-  is4 && setopt histignorealldups # If  a  new  command  line being added to the history
-                              # list duplicates an older one, the older command is removed from the list
-  setopt histignorespace      # remove command lines from the history list when
-                              # the first character on the line is a space
+setopt append_history       # append history list to the history file (important for multiple parallel zsh sessions!)
+is4 && setopt SHARE_HISTORY # import new commands from the history file also in other zsh-session
+setopt extended_history     # save each command's beginning timestamp and the duration to the history file
+is4 && setopt histignorealldups # If  a  new  command  line being added to the history
+                            # list duplicates an older one, the older command is removed from the list
+setopt histignorespace      # remove command lines from the history list when
+                            # the first character on the line is a space
 #  setopt histallowclobber    # add `|' to output redirections in the history
 #  setopt NO_clobber          # warning if file exists ('cat /dev/null > ~/.zshrc')
-  setopt auto_cd              # if a command is issued that can't be executed as a normal command,
-                              # and the command is the name of a directory, perform the cd command to that directory
-  setopt extended_glob        # in order to use #, ~ and ^ for filename generation
-                              # grep word *~(*.gz|*.bz|*.bz2|*.zip|*.Z) ->
-                              # -> searches for word not in compressed files
-                              # don't forget to quote '^', '~' and '#'!
-  setopt notify               # report the status of backgrounds jobs immediately
-  setopt hash_list_all        # Whenever a command completion is attempted, make sure \
-                              # the entire command path is hashed first.
-  setopt completeinword       # not just at the end
+setopt auto_cd              # if a command is issued that can't be executed as a normal command,
+                            # and the command is the name of a directory, perform the cd command to that directory
+setopt extended_glob        # in order to use #, ~ and ^ for filename generation
+                            # grep word *~(*.gz|*.bz|*.bz2|*.zip|*.Z) ->
+                            # -> searches for word not in compressed files
+                            # don't forget to quote '^', '~' and '#'!
+setopt notify               # report the status of backgrounds jobs immediately
+setopt hash_list_all        # Whenever a command completion is attempted, make sure \
+                            # the entire command path is hashed first.
+setopt completeinword       # not just at the end
 # setopt nocheckjobs          # don't warn me about bg processes when exiting
-  setopt nohup                # and don't kill them, either
+setopt nohup                # and don't kill them, either
 # setopt printexitvalue       # alert me if something failed
 # setopt dvorak               # with spelling correction, assume dvorak kb
-  setopt auto_pushd           # make cd push the old directory onto the directory stack.
-  setopt nonomatch            # try to avoid the 'zsh: no matches found...'
-  setopt nobeep               # avoid "beep"ing
-  setopt pushd_ignore_dups    # don't push the same dir twice.
+setopt auto_pushd           # make cd push the old directory onto the directory stack.
+setopt nonomatch            # try to avoid the 'zsh: no matches found...'
+setopt nobeep               # avoid "beep"ing
+setopt pushd_ignore_dups    # don't push the same dir twice.
 
-  MAILCHECK=30       # mailchecks
-  REPORTTIME=5       # report about cpu-/system-/user-time of command if running longer than 5 seconds
-  watch=(notme root) # watch for everyone but me and root
+MAILCHECK=30       # mailchecks
+REPORTTIME=5       # report about cpu-/system-/user-time of command if running longer than 5 seconds
+watch=(notme root) # watch for everyone but me and root
 
 # define word separators (for stuff like backward-word, forward-word, backward-kill-word,..)
 #  WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default
@@ -600,53 +683,62 @@ fi
 #  WORDCHARS='${WORDCHARS:s@/@}'
 
 # only slash should be considered as a word separator:
-  slash-backward-kill-word() {
+slash-backward-kill-word() {
     local WORDCHARS="${WORDCHARS:s@/@}"
     # zle backward-word
     zle backward-kill-word
-  }
-  zle -N slash-backward-kill-word
-# press esc-v to delete a word until its last '/' (not the same as ctrl-w!)
+}
+zle -N slash-backward-kill-word
+
 #k# Kill everything in a word up to its last \kbd{/}
-  bindkey '\ev' slash-backward-kill-word
+bindkey '\ev' slash-backward-kill-word
+
 # }}}
 
 # {{{ history
-  export ZSHDIR=$HOME/.zsh
-  #v#
-  HISTFILE=$HOME/.zsh_history
-  isgrmlcd && HISTSIZE=500  || HISTSIZE=5000
-  isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history
+
+ZSHDIR=$HOME/.zsh
+
+#v#
+HISTFILE=$HOME/.zsh_history
+isgrmlcd && HISTSIZE=500  || HISTSIZE=5000
+isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history
+
 # }}}
 
 # dirstack handling {{{
-  DIRSTACKSIZE=20
-  if [[ -f ~/.zdirs ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
-     dirstack=( ${(f)"$(< ~/.zdirs)"} )
-     # "cd -" won't work after login by just setting $OLDPWD, so
-     [[ -d $dirstack[0] ]] && cd $dirstack[0] && cd $OLDPWD
-  fi
-  chpwd() {
+
+DIRSTACKSIZE=20
+if [[ -f ~/.zdirs ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
+    dirstack=( ${(f)"$(< ~/.zdirs)"} )
+    # "cd -" won't work after login by just setting $OLDPWD, so
+    [[ -d $dirstack[0] ]] && cd $dirstack[0] && cd $OLDPWD
+fi
+
+chpwd() {
     builtin dirs -pl >! ~/.zdirs
-  }
+}
+
 # }}}
 
 # {{{ display battery status on right side of prompt via running 'BATTERY=1 zsh'
-  if [[ -n "$BATTERY" ]] ; then
-     if [[ -x $(which acpi) ]] ; then
+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}%"
+            PERCENT="warning: ${PERCENT}%"
         fi
-     fi
-  fi
+    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() {
+__vcs_dir() {
     local vcs base_dir sub_dir ref
+
     sub_dir() {
       local sub_dir
       sub_dir=$(readlink -f "${PWD}")
@@ -675,23 +767,26 @@ fi
     }
 
     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##*
+        [[ -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%%
+        base_dir=${base_dir%%
   *}
-      sub_dir=$(sub_dir "${base_dir}")
-      vcs="svk"
+        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"
+        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  ||
@@ -701,260 +796,267 @@ fi
   #  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
-  else
-     print 'Notice: no promptinit available :('
-  fi
+if autoload promptinit && promptinit 2>/dev/null ; then
+    promptinit # people should be able to use their favourite prompt
+else
+    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
-  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
-      fi
-      # just use DONTSETRPROMPT=1 to be able to overwrite RPROMPT
-      if [[ -z $DONTSETRPROMPT ]] ; then
-         if [[ -n $BATTERY ]] ; then
+# precmd () { setopt promptsubst; [[ -o interactive ]] && jobs -l;
+
+# make sure to use right prompt only when not running a command
+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
+    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
+        elif [[ -n $VCS ]] ; then
             RPROMPT="%(?..:()% $(__vcs_dir)${SCREENTITLE}"
-         else
+        else
             RPROMPT="%(?..:()% ${SCREENTITLE}"
             # RPROMPT="${SCREENTITLE}"
-         fi
-      fi
-      # adjust title of xterm
-      # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
-      case $TERM in (xterm*|rxvt)
-        print -Pn "\e]0;%n@%m: %~\a"
-        ;;
-      esac
-  }
+        fi
+    fi
+    # adjust title of xterm
+    # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
+    case $TERM in
+        (xterm*|rxvt)
+            print -Pn "\e]0;%n@%m: %~\a"
+            ;;
+    esac
+}
 
 # chpwd () => a function which is executed whenever the directory is changed
 
 # preexec() => a function running before every command
-  is4 && [[ -z $NOPRECMD ]] && preexec () {
-      [[ -n $NOPRECMD ]] && return 0
-  # set hostname if not running on host with name 'grml'
-      local HOSTNAME=$(hostname)
-      if [[ "$HOSTNAME" != grml ]] ; then
-         NAME="@$HOSTNAME"
-      fi
-  # get the name of the program currently running and hostname of local machine
-  # set screen window title if running in a screen
-      if [[ "$TERM" == screen* ]] ; then
-         # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]}       # don't use hostname
-         local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
-         echo -ne "\ek$CMD\e\\"
-      fi
-  # set the screen title to "zsh" when sitting at the command prompt:
-      if [[ "$TERM" == screen* ]] ; then
-         SCREENTITLE=$'%{\ekzsh\e\\%}'
-      else
-         SCREENTITLE=''
-      fi
-  # adjust title of xterm
-      case $TERM in (xterm*|rxvt)
-        print -Pn "\e]0;%n@%m: $1\a"
-        ;;
-      esac
-  }
+is4 && [[ -z $NOPRECMD ]] && \
+preexec () {
+    [[ -n $NOPRECMD ]] && return 0
+# set hostname if not running on host with name 'grml'
+    local HOSTNAME=$(hostname)
+    if [[ "$HOSTNAME" != grml ]] ; then
+        NAME="@$HOSTNAME"
+    fi
+# get the name of the program currently running and hostname of local machine
+# set screen window title if running in a screen
+    if [[ "$TERM" == screen* ]] ; then
+        # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]}       # don't use hostname
+        local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
+        echo -ne "\ek$CMD\e\\"
+    fi
+# set the screen title to "zsh" when sitting at the command prompt:
+    if [[ "$TERM" == screen* ]] ; then
+        SCREENTITLE=$'%{\ekzsh\e\\%}'
+    else
+        SCREENTITLE=''
+    fi
+# adjust title of xterm
+    case $TERM in
+        (xterm*|rxvt)
+            print -Pn "\e]0;%n@%m: $1\a"
+            ;;
+    esac
+}
 
 # set colors
-  if autoload 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
+if autoload 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.
-  PS4='+%N:%i:%_> ' # the execution trace prompt (setopt xtrace). default: '+%N:%i>'
+EXITCODE="%(?..%?%1v )"
+PS2='`%_> '       # secondary prompt, printed when the shell needs more information to complete a command.
+PS3='?# '         # selection prompt used within a select loop.
+PS4='+%N:%i:%_> ' # the execution trace prompt (setopt xtrace). default: '+%N:%i>'
 
-  # set variable debian_chroot if running in a chroot with /etc/debian_chroot
-  if [[ -z "$debian_chroot" ]] && [[ -r /etc/debian_chroot ]] ; then
+# set variable debian_chroot if running in a chroot with /etc/debian_chroot
+if [[ -z "$debian_chroot" ]] && [[ -r /etc/debian_chroot ]] ; then
     debian_chroot=$(cat /etc/debian_chroot)
-  fi
+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%<< %# "
-  else
+# don't use colors on dumb terminals (like emacs):
+if [[ "$TERM" == dumb ]] ; then
+    PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< %# "
+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)
     if [[ -n $GRMLPROMPT ]] ; then
-      PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D
+        PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D
 ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# "
     else
-      if (( EUID != 0 )); then
-        PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
-      else
-        PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
-      fi
+        if (( EUID != 0 )); then
+            PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
+        else
+            PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
+        fi
     fi
-  fi
+fi
 
-  # if we are inside a grml-chroot set a specific prompt theme
-  if [[ -n "$GRML_CHROOT" ]] ; then
-     PROMPT="%{$fg[red]%}(CHROOT) %{$fg_bold[red]%}%n%{$fg_no_bold[white]%}@%m %40<...<%B%~%b%<< %\# "
-  fi
+# if we are inside a grml-chroot set a specific prompt theme
+if [[ -n "$GRML_CHROOT" ]] ; then
+    PROMPT="%{$fg[red]%}(CHROOT) %{$fg_bold[red]%}%n%{$fg_no_bold[white]%}@%m %40<...<%B%~%b%<< %\# "
+fi
 # }}}
 
 # {{{ 'hash' some often used directories
-  #d# start
-  hash -d deb=/var/cache/apt/archives
-  hash -d doc=/usr/share/doc
-  hash -d linux=/lib/modules/$(command uname -r)/build/
-  hash -d log=/var/log
-  hash -d slog=/var/log/syslog
-  hash -d src=/usr/src
-  hash -d templ=/usr/share/doc/grml-templates
-  hash -d tt=/usr/share/doc/texttools-doc
-  hash -d www=/var/www
-  #d# end
+#d# start
+hash -d deb=/var/cache/apt/archives
+hash -d doc=/usr/share/doc
+hash -d linux=/lib/modules/$(command uname -r)/build/
+hash -d log=/var/log
+hash -d slog=/var/log/syslog
+hash -d src=/usr/src
+hash -d templ=/usr/share/doc/grml-templates
+hash -d tt=/usr/share/doc/texttools-doc
+hash -d www=/var/www
+#d# end
 # }}}
 
 # {{{ some aliases
-  if [[ $UID -eq 0 ]] ; then
-     [[ -r /etc/grml/screenrc ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc'
-  elif [[ -r $HOME/.screenrc ]] ; then
-     alias screen="/usr/bin/screen -c $HOME/.screenrc"
-  else
-     [[ -r /etc/grml/screenrc_grml ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml'
-  fi
+if [[ $UID -eq 0 ]] ; then
+    [[ -r /etc/grml/screenrc ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc'
+elif [[ -r $HOME/.screenrc ]] ; then
+    alias screen="/usr/bin/screen -c $HOME/.screenrc"
+else
+    [[ -r /etc/grml/screenrc_grml ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml'
+fi
 
-  # do we have GNU ls with color-support?
-  if ls --help 2>/dev/null | grep -- --color= >/dev/null && [[ "$TERM" != dumb ]] ; then
-     #a1# execute \kbd{@a@}:\quad ls with colors
-     alias ls='ls -b -CF --color=auto'
-     #a1# execute \kbd{@a@}:\quad list all files, with colors
-     alias la='ls -la --color=auto'
-     #a1# long colored list, without dotfiles (@a@)
-     alias ll='ls -l --color=auto'
-     #a1# long colored list, human readable sizes (@a@)
-     alias lh='ls -hAl --color=auto'
-     #a1# List files, append qualifier to filenames \\&\quad(\kbd{/} for directories, \kbd{@} for symlinks ...)
-     alias l='ls -lF --color=auto'
-  else
-     alias ls='ls -b -CF'
-     alias la='ls -la'
-     alias ll='ls -l'
-     alias lh='ls -hAl'
-     alias l='ls -lF'
-  fi
+# do we have GNU ls with color-support?
+if ls --help 2>/dev/null | grep -- --color= >/dev/null && [[ "$TERM" != dumb ]] ; then
+    #a1# execute \kbd{@a@}:\quad ls with colors
+    alias ls='ls -b -CF --color=auto'
+    #a1# execute \kbd{@a@}:\quad list all files, with colors
+    alias la='ls -la --color=auto'
+    #a1# long colored list, without dotfiles (@a@)
+    alias ll='ls -l --color=auto'
+    #a1# long colored list, human readable sizes (@a@)
+    alias lh='ls -hAl --color=auto'
+    #a1# List files, append qualifier to filenames \\&\quad(\kbd{/} for directories, \kbd{@} for symlinks ...)
+    alias l='ls -lF --color=auto'
+else
+    alias ls='ls -b -CF'
+    alias la='ls -la'
+    alias ll='ls -l'
+    alias lh='ls -hAl'
+    alias l='ls -lF'
+fi
 
-  alias mdstat='cat /proc/mdstat'
-  alias ...='cd ../../'
+alias mdstat='cat /proc/mdstat'
+alias ...='cd ../../'
 
-  # generate alias named "$KERNELVERSION-reboot" so you can use boot with kexec:
-  if [[ -x /sbin/kexec ]] && [[ -r /proc/cmdline ]] ; then
-     alias "$(uname -r)-reboot"="kexec -l --initrd=/boot/initrd.img-"$(uname -r)" --command-line=\"$(cat /proc/cmdline)\" /boot/vmlinuz-"$(uname -r)""
-  fi
+# generate alias named "$KERNELVERSION-reboot" so you can use boot with kexec:
+if [[ -x /sbin/kexec ]] && [[ -r /proc/cmdline ]] ; then
+    alias "$(uname -r)-reboot"="kexec -l --initrd=/boot/initrd.img-"$(uname -r)" --command-line=\"$(cat /proc/cmdline)\" /boot/vmlinuz-"$(uname -r)""
+fi
+
+alias cp='nocorrect cp'         # no spelling correction on cp
+alias mkdir='nocorrect mkdir'   # no spelling correction on mkdir
+alias mv='nocorrect mv'         # no spelling correction on mv
+alias rm='nocorrect rm'         # no spelling correction on rm
 
-  alias cp='nocorrect cp'         # no spelling correction on cp
-  alias mkdir='nocorrect mkdir'   # no spelling correction on mkdir
-  alias mv='nocorrect mv'         # no spelling correction on mv
-  alias rm='nocorrect rm'         # no spelling correction on rm
+#a1# Execute \kbd{rmdir}
+alias rd='rmdir'
+#a1# Execute \kbd{rmdir}
+alias md='mkdir'
 
-  #a1# Execute \kbd{rmdir}
-  alias rd='rmdir'
-  #a1# Execute \kbd{rmdir}
-  alias md='mkdir'
+# see http://www.cl.cam.ac.uk/~mgk25/unicode.html#term for details
+alias term2iso="echo 'Setting terminal to iso mode' ; print -n '\e%@'"
+alias term2utf="echo 'Setting terminal to utf-8 mode'; print -n '\e%G'"
 
-  # see http://www.cl.cam.ac.uk/~mgk25/unicode.html#term for details
-  alias term2iso="echo 'Setting terminal to iso mode' ; print -n '\e%@'"
-  alias term2utf="echo 'Setting terminal to utf-8 mode'; print -n '\e%G'"
+# make sure it is not assigned yet
+[[ $(whence -w utf2iso &>/dev/null) == 'utf2iso: alias' ]] && unalias utf2iso
 
-  # make sure it is not assigned yet
-  [[ $(whence -w utf2iso &>/dev/null) == 'utf2iso: alias' ]] && unalias utf2iso
-  utf2iso() {
+utf2iso() {
     if isutfenv ; then
-       for ENV in $(env | command grep -i '.utf') ; do
-           eval export "$(echo $ENV | sed 's/UTF-8/iso885915/ ; s/utf8/iso885915/')"
-       done
-     fi
-  }
+        for ENV in $(env | command grep -i '.utf') ; do
+            eval export "$(echo $ENV | sed 's/UTF-8/iso885915/ ; s/utf8/iso885915/')"
+        done
+    fi
+}
 
-  # 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
-          eval export "$(echo $ENV | sed 's/iso.*/UTF-8/ ; s/ISO.*/UTF-8/')"
-      done
-   fi
- }
+# 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
+            eval export "$(echo $ENV | sed 's/iso.*/UTF-8/ ; s/ISO.*/UTF-8/')"
+        done
+    fi
+}
 
 # set up software synthesizer via speakup
-  alias swspeak='
-    aumix -w 90 -v 90 -p 90 -m 90
-    if ! [[ -r /dev/softsynth ]] ; then
-       flite -o play -t "Sorry, software synthesizer not available. Did you boot with swspeak bootoption?"
-       return 1
-    else
-       setopt singlelinezle
-       unsetopt prompt_cr
-       export PS1="%m%# "
-       nice -n -20 speechd-up
-       sleep 2
-       flite -o play -t "Finished setting up software synthesizer"
-    fi
-  '
+# TODO: make this a function?
+alias swspeak='
+  aumix -w 90 -v 90 -p 90 -m 90
+  if ! [[ -r /dev/softsynth ]] ; then
+     flite -o play -t "Sorry, software synthesizer not available. Did you boot with swspeak bootoption?"
+     return 1
+  else
+     setopt singlelinezle
+     unsetopt prompt_cr
+     export PS1="%m%# "
+     nice -n -20 speechd-up
+     sleep 2
+     flite -o play -t "Finished setting up software synthesizer"
+  fi
+'
 
 # I like clean prompt, so provide simple way to get that
-  alias 0 &>/dev/null || functions 0 &>/dev/null || alias 0='return 0'
+check_com 0 || alias 0='return 0'
 
 # for really lazy people like mika:
-  type S &>/dev/null || alias S='screen'
-  type s &>/dev/null || alias s='ssh'
+check_com S &>/dev/null || alias S='screen'
+check_com s &>/dev/null || alias s='ssh'
 
 # get top 10 shell commands:
-  alias top10='print -l ? ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
+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 isutfenv ; then
+if check_com -c truecrypt ; then
+    if isutfenv ; then
         alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077,utf8" '
-     else
+    else
         alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077" '
-     fi
-  fi
+    fi
+fi
 
 #f1# Hints for the use of zsh on grml
-  zsh-help(){print "$bg[white]$fg[black]
+zsh-help() {
+    print "$bg[white]$fg[black]
 zsh-help - hints for use of zsh on grml
-=======================================$reset_color
+=======================================$reset_color"
 
+    print '
 Main configuration of zsh happens in /etc/zsh/zshrc (global)
-and /etc/skel/.zshrc which is copied to \$HOME/.zshrc once.
+and /etc/skel/.zshrc which is copied to $HOME/.zshrc once.
 The files are part of the package grml-etc-core, if you want to
 use them on a non-grml-system just get the tar.gz from
 http://deb.grml.org/ or get the files from the mercurial
@@ -964,22 +1066,22 @@ repository:
   http://hg.grml.org/grml-etc-core/raw-file/tip/etc/zsh/zshrc
 
 If you want to stay in sync with zsh configuration of grml
-run 'ln -sf /etc/skel/.zshrc \$HOME/.zshrc' and configure
-your own stuff in \$HOME/.zshrc.local. System wide configuration
+run '\''ln -sf /etc/skel/.zshrc $HOME/.zshrc'\'' and configure
+your own stuff in $HOME/.zshrc.local. System wide configuration
 without touching configuration files of grml can take place
 in /etc/zsh/zshrc.local.
 
 If you want to use the configuration of user grml also when
-running as user root just run 'zshskel' which will source
+running as user root just run '\''zshskel'\'' which will source
 the file /etc/skel/.zshrc.
 
 For information regarding zsh start at http://grml.org/zsh/
 
-Take a look at grml's zsh refcard:
+Take a look at grml'\''s zsh refcard:
 % xpdf =(zcat /usr/share/doc/grml-docs/zsh/grml-zsh-refcard.pdf.gz)
 
 Check out the main zsh refcard:
-% $BROWSER http://www.bash2zsh.com/zsh_refcard/refcard.pdf
+% '$BROWSER' http://www.bash2zsh.com/zsh_refcard/refcard.pdf
 
 And of course visit the zsh-lovers:
 % man zsh-lovers
@@ -989,17 +1091,19 @@ invoking zsh without having to edit configuration files.
 Basically meant for bash users who are not used to the power of
 the zsh yet. :)
 
-  \"NOCOR=1    zsh\" => deactivate automatic correction
-  \"NOMENU=1   zsh\" => do not use menu completion (note: use strg-d for completion instead!)
-  \"NOPRECMD=1 zsh\" => disable the precmd + preexec commands (set GNU screen title)
-  \"BATTERY=1  zsh\" => activate battery status (via acpi) on right side of prompt
+  "NOCOR=1    zsh" => deactivate automatic correction
+  "NOMENU=1   zsh" => do not use menu completion (note: use strg-d for completion instead!)
+  "NOPRECMD=1 zsh" => disable the precmd + preexec commands (set GNU screen title)
+  "BATTERY=1  zsh" => activate battery status (via acpi) on right side of prompt'
+
+    print "
 $bg[white]$fg[black]
 Please report wishes + bugs to the grml-team: http://grml.org/bugs/
 Enjoy your grml system with the zsh!$reset_color"
 }
 
 # debian stuff
-  if [[ -r /etc/debian_version ]] ; then
+if [[ -r /etc/debian_version ]] ; then
     #a3# Execute \kbd{apt-cache search}
     alias acs='apt-cache search'
     #a3# Execute \kbd{apt-cache show}
@@ -1025,21 +1129,21 @@ Enjoy your grml system with the zsh!$reset_color"
 
     # debian upgrade
     #f3# Execute \kbd{apt-get update \&\& }\\&\quad \kbd{apt-get dist-upgrade}
-    upgrade () {
-      if [[ -z "$1" ]] ; then
-          $SUDO apt-get update
-          $SUDO apt-get -u upgrade
-      else
-          ssh $1 $SUDO apt-get update
-          # ask before the upgrade
-          local dummy
-          ssh $1 $SUDO apt-get --no-act upgrade
-          echo -n 'Process the upgrade?'
-          read -q dummy
-          if [[ $dummy == "y" ]] ; then
-              ssh $1 $SUDO apt-get -u upgrade --yes
-          fi
-      fi
+    upgrade() {
+        if [[ -z "$1" ]] ; then
+            $SUDO apt-get update
+            $SUDO apt-get -u upgrade
+        else
+            ssh $1 $SUDO apt-get update
+            # ask before the upgrade
+            local dummy
+            ssh $1 $SUDO apt-get --no-act upgrade
+            echo -n 'Process the upgrade?'
+            read -q dummy
+            if [[ $dummy == "y" ]] ; then
+                ssh $1 $SUDO apt-get -u upgrade --yes
+            fi
+        fi
     }
 
     isgrmlcd && alias su="sudo -s"          # get a root shell
@@ -1049,41 +1153,42 @@ Enjoy your grml system with the zsh!$reset_color"
     alias tlog="tail -f /var/log/syslog"    # follow the syslog
     #a1# (Re)-source \kbd{/etc/skel/.zshrc}
     alias zshskel="source /etc/skel/.zshrc" # source skeleton zshrc
-  fi
+fi
 
 # sort installed Debian-packages by size
-  if [[ -x $(which 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 check_com -c 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 || ! -x $(which cdrecord) ]] ; then
-     if [[ -x $(which wodim) ]] ; then
+if [[ -L /usr/bin/cdrecord ]] || ! check_com -c cdrecord ; then
+    if check_com -c 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.
 
 Please use the wodim binary instead' ; return 1"
-     fi
-  fi
+    fi
+fi
 
 # get_tw_cli has been renamed into get_3ware
-  if [[ -x $(which 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
-     }
-  fi
+if check_com -c 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
+    }
+fi
 
 # I hate lacking backward compatibility, so provide an alternative therefore
-  if ! [[ -x $(which apache2-ssl-certificate) ]] ; then
-     apache2-ssl-certificate(){
+if ! check_com -c apache2-ssl-certificate ; then
+
+    apache2-ssl-certificate() {
 
-     print 'Debian does not ship apache2-ssl-certificate anymore (see #398520). :('
-     print 'You might want to take a look at Debian the package ssl-cert as well.'
-     print 'To generate a certificate for use with apache2 follow the instructions:'
+    print 'Debian does not ship apache2-ssl-certificate anymore (see #398520). :('
+    print 'You might want to take a look at Debian the package ssl-cert as well.'
+    print 'To generate a certificate for use with apache2 follow the instructions:'
 
-     echo '
+    echo '
 
 export RANDFILE=/dev/random
 mkdir /etc/apache2/ssl/
@@ -1092,15 +1197,15 @@ chmod 600 /etc/apache2/ssl/apache.pem
 
 Run "grml-tips ssl-certificate" if you need further instructions.
 '
-   }
-  fi
+    }
+fi
 # }}}
 
 # {{{ Use hard limits, except for a smaller stack and no core dumps
-  unlimit
-  limit stack 8192
-  isgrmlcd && limit core 0 # important for a live-cd-system
-  limit -s
+unlimit
+limit stack 8192
+isgrmlcd && limit core 0 # important for a live-cd-system
+limit -s
 # }}}
 
 # {{{ completion stuff
@@ -1110,68 +1215,69 @@ Run "grml-tips ssl-certificate" if you need further instructions.
 #         press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
 grmlcomp() {
 ## completion system
-  zstyle ':completion:*:approximate:'    max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )' # allow one error for every three characters typed in approximate completer
-  zstyle ':completion:*:complete:-command-::commands' ignored-patterns '(aptitude-*|*\~)' # don't complete backup files as executables
-  zstyle ':completion:*:correct:*'       insert-unambiguous true             # start menu completion only if it could find no unambiguous initial string
-  zstyle ':completion:*:corrections'     format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}' #
-  zstyle ':completion:*:correct:*'       original true                       #
-  zstyle ':completion:*:default'         list-colors ${(s.:.)LS_COLORS}      # activate color-completion(!)
-  zstyle ':completion:*:descriptions'    format $'%{\e[0;31m%}completing %B%d%b%{\e[0m%}'  # format on completion
-  zstyle ':completion:*:*:cd:*:directory-stack' menu yes select              # complete 'cd -<tab>' with menu
-  zstyle ':completion:*:expand:*'        tag-order all-expansions            # insert all expansions for expand completer
-  zstyle ':completion:*:history-words'   list false                          #
-  zstyle ':completion:*:history-words'   menu yes                            # activate menu
-  zstyle ':completion:*:history-words'   remove-all-dups yes                 # ignore duplicate entries
-  zstyle ':completion:*:history-words'   stop yes                            #
-  zstyle ':completion:*'                 matcher-list 'm:{a-z}={A-Z}'        # match uppercase from lowercase
-  zstyle ':completion:*:matches'         group 'yes'                         # separate matches into groups
-  zstyle ':completion:*'                 group-name ''
-  if [[ -z "$NOMENU" ]] ; then
-    zstyle ':completion:*'               menu select=5                       # if there are more than 5 options allow selecting from a menu
-  else
+## no initial indention in grmlcomp(), the lines are long enough already.
+zstyle ':completion:*:approximate:'    max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )' # allow one error for every three characters typed in approximate completer
+zstyle ':completion:*:complete:-command-::commands' ignored-patterns '(aptitude-*|*\~)' # don't complete backup files as executables
+zstyle ':completion:*:correct:*'       insert-unambiguous true             # start menu completion only if it could find no unambiguous initial string
+zstyle ':completion:*:corrections'     format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}' #
+zstyle ':completion:*:correct:*'       original true                       #
+zstyle ':completion:*:default'         list-colors ${(s.:.)LS_COLORS}      # activate color-completion(!)
+zstyle ':completion:*:descriptions'    format $'%{\e[0;31m%}completing %B%d%b%{\e[0m%}'  # format on completion
+zstyle ':completion:*:*:cd:*:directory-stack' menu yes select              # complete 'cd -<tab>' with menu
+zstyle ':completion:*:expand:*'        tag-order all-expansions            # insert all expansions for expand completer
+zstyle ':completion:*:history-words'   list false                          #
+zstyle ':completion:*:history-words'   menu yes                            # activate menu
+zstyle ':completion:*:history-words'   remove-all-dups yes                 # ignore duplicate entries
+zstyle ':completion:*:history-words'   stop yes                            #
+zstyle ':completion:*'                 matcher-list 'm:{a-z}={A-Z}'        # match uppercase from lowercase
+zstyle ':completion:*:matches'         group 'yes'                         # separate matches into groups
+zstyle ':completion:*'                 group-name ''
+if [[ -z "$NOMENU" ]] ; then
+    zstyle ':completion:*'               menu select=5                     # if there are more than 5 options allow selecting from a menu
+else
     setopt no_auto_menu # don't use any menus at all
-  fi
-  zstyle ':completion:*:messages'        format '%d'                         #
-  zstyle ':completion:*:options'         auto-description '%d'               #
-  zstyle ':completion:*:options'         description 'yes'                   # describe options in full
-  zstyle ':completion:*:processes'       command 'ps -au$USER'               # on processes completion complete all user processes
-  zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters        # offer indexes before parameters in subscripts
-  zstyle ':completion:*'                 verbose true                        # provide verbose completion information
-  zstyle ':completion:*:warnings'        format $'%{\e[0;31m%}No matches for:%{\e[0m%} %d' # set format for warnings
-  zstyle ':completion:*:*:zcompile:*'    ignored-patterns '(*~|*.zwc)'       # define files to ignore for zcompile
-  zstyle ':completion:correct:'          prompt 'correct to: %e'             #
-  zstyle ':completion::(^approximate*):*:functions' ignored-patterns '_*'    # Ignore completion functions for commands you don't have:
+fi
+zstyle ':completion:*:messages'        format '%d'                         #
+zstyle ':completion:*:options'         auto-description '%d'               #
+zstyle ':completion:*:options'         description 'yes'                   # describe options in full
+zstyle ':completion:*:processes'       command 'ps -au$USER'               # on processes completion complete all user processes
+zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters        # offer indexes before parameters in subscripts
+zstyle ':completion:*'                 verbose true                        # provide verbose completion information
+zstyle ':completion:*:warnings'        format $'%{\e[0;31m%}No matches for:%{\e[0m%} %d' # set format for warnings
+zstyle ':completion:*:*:zcompile:*'    ignored-patterns '(*~|*.zwc)'       # define files to ignore for zcompile
+zstyle ':completion:correct:'          prompt 'correct to: %e'             #
+zstyle ':completion::(^approximate*):*:functions' ignored-patterns '_*'    # Ignore completion functions for commands you don't have:
 
 # complete manual by their section
-  zstyle ':completion:*:manuals'    separate-sections true
-  zstyle ':completion:*:manuals.*'  insert-sections   true
-  zstyle ':completion:*:man:*'      menu yes select
+zstyle ':completion:*:manuals'    separate-sections true
+zstyle ':completion:*:manuals.*'  insert-sections   true
+zstyle ':completion:*:man:*'      menu yes select
 
 ## correction
 # run rehash on completion so new installed program are found automatically:
-  _force_rehash() {
-      (( CURRENT == 1 )) && rehash
-         return 1 # Because we didn't really complete anything
-    }
+_force_rehash() {
+    (( CURRENT == 1 )) && rehash
+    return 1 # Because we didn't really complete anything
+}
 # some people don't like the automatic correction - so run 'NOCOR=1 zsh' to deactivate it
-  if [[ -n "$NOCOR" ]] ; then
+if [[ -n "$NOCOR" ]] ; then
     zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _files _ignored
     setopt nocorrect # do not try to correct the spelling if possible
-  else
+else
 #    zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _ignored _correct _approximate _files
     setopt correct  # try to correct the spelling if possible
     zstyle -e ':completion:*' completer '
         if [[ $_last_try != "$HISTNO$BUFFER$CURSOR" ]] ; then
-          _last_try="$HISTNO$BUFFER$CURSOR"
-          reply=(_complete _match _ignored _prefix _files)
+            _last_try="$HISTNO$BUFFER$CURSOR"
+            reply=(_complete _match _ignored _prefix _files)
         else
-          if [[ $words[1] == (rm|mv) ]] ; then
-            reply=(_complete _files)
-          else
-            reply=(_oldlist _expand _force_rehash _complete _ignored _correct _approximate _files)
-          fi
+            if [[ $words[1] == (rm|mv) ]] ; then
+                reply=(_complete _files)
+            else
+                reply=(_oldlist _expand _force_rehash _complete _ignored _correct _approximate _files)
+            fi
         fi'
-  fi
+fi
 # zstyle ':completion:*' completer _complete _correct _approximate
 # zstyle ':completion:*' expand prefix suffix
 
@@ -1187,28 +1293,28 @@ grmlcomp() {
 # bindkey "^M" my_accept
 
 # command for process lists, the local web server details and host completion
-  zstyle ':completion:*:urls' local 'www' '/var/www/' 'public_html'
+zstyle ':completion:*:urls' local 'www' '/var/www/' 'public_html'
 
 # caching
-  [[ -d $ZSHDIR/cache ]] && zstyle ':completion:*' use-cache yes && \
+[[ -d $ZSHDIR/cache ]] && zstyle ':completion:*' use-cache yes && \
                           zstyle ':completion::complete:*' cache-path $ZSHDIR/cache/
 
 # host completion /* add brackets as vim can't parse zsh's complex cmdlines 8-) {{{ */
-  if is42 ; then
+if is42 ; then
     [[ -r ~/.ssh/known_hosts ]] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()
     [[ -r /etc/hosts ]] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} || _etc_hosts=()
-  else
+else
     _ssh_hosts=()
     _etc_hosts=()
-  fi
-  hosts=(
-      `hostname`
-      "$_ssh_hosts[@]"
-      "$_etc_hosts[@]"
-      grml.org
-      localhost
-  )
-  zstyle ':completion:*:hosts' hosts $hosts
+fi
+hosts=(
+    $(hostname)
+    "$_ssh_hosts[@]"
+    "$_etc_hosts[@]"
+    grml.org
+    localhost
+)
+zstyle ':completion:*:hosts' hosts $hosts
 #  zstyle '*' hosts $hosts
 
 # specify your logins:
@@ -1234,64 +1340,64 @@ grmlcomp() {
 # zstyle ':completion:*:*:telnet:*' users-hosts-ports $telnet_users_hosts_ports
 
 # use generic completion system for programs not yet defined:
-  compdef _gnu_generic tail head feh cp mv df stow uname ipacsum fetchipac
+compdef _gnu_generic tail head feh cp mv df stow uname ipacsum fetchipac
 
 # see upgrade function in this file
-  compdef _hosts upgrade
+compdef _hosts upgrade
 }
 # }}}
 
 # {{{ grmlstuff
 grmlstuff() {
 # people should use 'grml-x'!
-  startx() {
-    if [[ -e /etc/X11/xorg.conf ]] ; then
-       [[ -x /usr/bin/startx ]] && /usr/bin/startx "$@" || /usr/X11R6/bin/startx "$@"
-    else
-      echo "Please use the script \"grml-x\" for starting the X Window System
+    startx() {
+        if [[ -e /etc/X11/xorg.conf ]] ; then
+            [[ -x /usr/bin/startx ]] && /usr/bin/startx "$@" || /usr/X11R6/bin/startx "$@"
+        else
+            echo "Please use the script \"grml-x\" for starting the X Window System
 because there does not exist /etc/X11/xorg.conf yet.
 If you want to use startx anyway please call \"/usr/bin/startx\"."
-      return -1
-    fi
-  }
+            return -1
+        fi
+    }
 
-  xinit() {
-    if [[ -e /etc/X11/xorg.conf ]] ; then
-       [[ -x /usr/bin/xinit ]] && /usr/bin/xinit || /usr/X11R6/bin/xinit
-    else
-      echo "Please use the script \"grml-x\" for starting the X Window System.
+    xinit() {
+        if [[ -e /etc/X11/xorg.conf ]] ; then
+            [[ -x /usr/bin/xinit ]] && /usr/bin/xinit || /usr/X11R6/bin/xinit
+        else
+            echo "Please use the script \"grml-x\" for starting the X Window System.
 because there does not exist /etc/X11/xorg.conf yet.
 If you want to use xinit anyway please call \"/usr/bin/xinit\"."
-      return -1
-    fi
-  }
+            return -1
+        fi
+    }
 
-  if [[ -x $(which 915resolution) ]] ; then
-     alias 855resolution='echo -e "Please use 915resolution as resolution modify tool for Intel graphic chipset."; return -1'
-  fi
+    if check_com -c 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'
+    #a1# Output version of running grml
+    alias grml-version='cat /etc/grml_version'
 
-  if [[ -x $(which rebuildfstab) ]] ; then
-     #a1# Rebuild /etc/fstab
-     alias grml-rebuildfstab='rebuildfstab -v -r -config'
-  fi
+    if check_com -c rebuildfstab ; then
+        #a1# Rebuild /etc/fstab
+        alias grml-rebuildfstab='rebuildfstab -v -r -config'
+    fi
 
-  if [[ -x $(which grml-debootstrap) ]] ; then
-     alias debian2hd='print "Installing debian to harddisk is possible via using grml-debootstrap." ; return 1'
-  fi
+    if check_com -c grml-debootstrap ; then
+        alias debian2hd='print "Installing debian to harddisk is possible via using grml-debootstrap." ; return 1'
+    fi
 }
 # }}}
 
 # {{{ now run the functions
-  isgrml && checkhome
-  is4    && isgrml    && grmlstuff
-  is4    && grmlcomp
+isgrml && checkhome
+is4    && isgrml    && grmlstuff
+is4    && grmlcomp
 # }}}
 
 # {{{ keephack
-  [[ -r /etc/zsh/keephack ]] && is4 && source /etc/zsh/keephack
+is4 && xsource "/etc/zsh/keephack"
 # }}}
 
 # {{{ wonderful idea of using "e" glob qualifier by Peter Stephenson
@@ -1301,126 +1407,129 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"."
 # This lists all the files in the current directory newer than the reference file.
 # You can also specify the reference file inline; note quotes:
 # $ ls -l *(e:'nt ~/.zshenv':)
-  is4 && nt() {
+is4 && nt() {
     if [[ -n $1 ]] ; then
-      local NTREF=${~1}
+        local NTREF=${~1}
     fi
     [[ $REPLY -nt $NTREF ]]
-  }
+}
 # }}}
 
 # shell functions {{{
-  #f1# Provide csh compatibility
-  setenv()  { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" }  # csh compatibility
-  #f1# Reload an autoloadable function
-  freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
-  #f1# Reload zsh setup
-  reload () {
-   if [[ "$#*" -eq 0 ]] ; then
-      [[ -r ~/.zshrc ]] && . ~/.zshrc
-   else
-      local fn
-      for fn in "$@"; do
-          unfunction $fn
-          autoload -U $fn
-      done
-   fi
-  }
-  compdef _functions reload freload
 
-  #f1# List symlinks in detail (more detailed version of 'readlink -f' and 'whence -s')
-  sll() {
+#f1# Provide csh compatibility
+setenv()  { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" }  # csh compatibility
+
+#f1# Reload an autoloadable function
+freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
+
+#f1# Reload zsh setup
+reload() {
+    if [[ "$#*" -eq 0 ]] ; then
+        [[ -r ~/.zshrc ]] && . ~/.zshrc
+    else
+        local fn
+        for fn in "$@"; do
+            unfunction $fn
+            autoload -U $fn
+        done
+    fi
+}
+compdef _functions reload freload
+
+#f1# List symlinks in detail (more detailed version of 'readlink -f' and 'whence -s')
+sll() {
     [[ -z "$1" ]] && printf 'Usage: %s <file(s)>\n' "$0" && return 1
     for i in "$@" ; do
-      file=$i
-      while [[ -h "$file" ]] ; do
-        ls -l $file
-        file=$(readlink "$file")
-      done
+        file=$i
+        while [[ -h "$file" ]] ; do
+            ls -l $file
+            file=$(readlink "$file")
+        done
     done
-  }
+}
 
-  # fast manual access
-  if type -p qma &>/dev/null ; then
-  #f1# View the zsh manual
-     manzsh()  { qma zshall "$1" }
-     compdef _man qma
-  else
-     manzsh()  { /usr/bin/man zshall |  vim -c "se ft=man| se hlsearch" +/"$1" - ; }
-     # manzsh()  { /usr/bin/man zshall |  most +/"$1" ; }
-     # [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
-     # manzsh()  { man zshall | $MYLESS -p $1 ; }
-  fi
+# fast manual access
+if check_com qma ; then
+    #f1# View the zsh manual
+    manzsh()  { qma zshall "$1" }
+    compdef _man qma
+else
+    manzsh()  { /usr/bin/man zshall |  vim -c "se ft=man| se hlsearch" +/"$1" - ; }
+    # manzsh()  { /usr/bin/man zshall |  most +/"$1" ; }
+    # [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
+    # manzsh()  { man zshall | $MYLESS -p $1 ; }
+fi
 
-  if [[ -x $(which most) ]] ; then
-  #f1# View Debian's changelog of a given package
+if check_com -c most ; then
+    #f1# View Debian's changelog of a given package
     dchange() {
-      if [[ -r /usr/share/doc/${1}/changelog.Debian.gz ]] ; then
-         most /usr/share/doc/${1}/changelog.Debian.gz
-      elif [[ -r /usr/share/doc/${1}/changelog.gz ]] ; then
-         most /usr/share/doc/${1}/changelog.gz
-      else
-         if type -p aptitude &>/dev/null ; then
-            echo "No changelog for package $1 found, using aptitude to retrieve it."
-            if isgrml ; then
-              aptitude -t unstable changelog ${1}
+        if [[ -r /usr/share/doc/${1}/changelog.Debian.gz ]] ; then
+            most /usr/share/doc/${1}/changelog.Debian.gz
+        elif [[ -r /usr/share/doc/${1}/changelog.gz ]] ; then
+            most /usr/share/doc/${1}/changelog.gz
+        else
+            if check_com -c aptitude ; then
+                echo "No changelog for package $1 found, using aptitude to retrieve it."
+                if isgrml ; then
+                    aptitude -t unstable changelog ${1}
+                else
+                    aptitude changelog ${1}
+                fi
             else
-              aptitude changelog ${1}
+                echo "No changelog for package $1 found, sorry."
+                return 1
             fi
-         else
-            echo "No changelog for package $1 found, sorry."
-            return 1
-         fi
-      fi
+        fi
     }
     _dchange() { _files -W /usr/share/doc -/ }
     compdef _dchange dchange
 
-  #f1# View Debian's NEWS of a given package
+    #f1# View Debian's NEWS of a given package
     dnews() {
-      if [[ -r /usr/share/doc/${1}/NEWS.Debian.gz ]] ; then
-         most /usr/share/doc/${1}/NEWS.Debian.gz
-      else
-         if [[ -r /usr/share/doc/${1}/NEWS.gz ]] ; then
-            most /usr/share/doc/${1}/NEWS.gz
-         else
-            echo "No NEWS file for package $1 found, sorry."
-            return 1
-         fi
-      fi
+        if [[ -r /usr/share/doc/${1}/NEWS.Debian.gz ]] ; then
+            most /usr/share/doc/${1}/NEWS.Debian.gz
+        else
+            if [[ -r /usr/share/doc/${1}/NEWS.gz ]] ; then
+                most /usr/share/doc/${1}/NEWS.gz
+            else
+                echo "No NEWS file for package $1 found, sorry."
+                return 1
+            fi
+        fi
     }
     _dnews() { _files -W /usr/share/doc -/ }
     compdef _dnews dnews
 
-  #f1# View upstream's changelog of a given package
+    #f1# View upstream's changelog of a given package
     uchange() {
-      if [[ -r /usr/share/doc/${1}/changelog.gz ]] ; then
-         most /usr/share/doc/${1}/changelog.gz
-      else
-         echo "No changelog for package $1 found, sorry."
-         return 1
-      fi
+        if [[ -r /usr/share/doc/${1}/changelog.gz ]] ; then
+            most /usr/share/doc/${1}/changelog.gz
+        else
+            echo "No changelog for package $1 found, sorry."
+            return 1
+        fi
     }
     _uchange() { _files -W /usr/share/doc -/ }
     compdef _uchange uchange
-  fi
+fi
 
 # zsh profiling
-  profile () {
-      ZSH_PROFILE_RC=1 $SHELL "$@"
-  }
+profile() {
+    ZSH_PROFILE_RC=1 $SHELL "$@"
+}
 
 #f1# Edit an alias via zle
-  edalias() {
+edalias() {
     [[ -z "$1" ]] && { echo "Usage: edalias <alias_to_edit>" ; return 1 } || vared aliases'[$1]' ;
-  }
-  compdef _aliases edalias
+}
+compdef _aliases edalias
 
 #f1# Edit a function via zle
-  edfunc() {
+edfunc() {
     [[ -z "$1" ]] && { echo "Usage: edfun <function_to_edit>" ; return 1 } || zed -f "$1" ;
-  }
-  compdef _functions edfunc
+}
+compdef _functions edfunc
 
 # use it e.g. via 'Restart apache2'
 #m# f6 Start() \kbd{/etc/init.d/\em{process}}\quad\kbd{start}
@@ -1428,178 +1537,181 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"."
 #m# f6 Stop() \kbd{/etc/init.d/\em{process}}\quad\kbd{stop}
 #m# f6 Reload() \kbd{/etc/init.d/\em{process}}\quad\kbd{reload}
 #m# f6 Force-Reload() \kbd{/etc/init.d/\em{process}}\quad\kbd{force-reload}
- if [[ -d /etc/init.d ]] ; then
-  for i in Start Restart Stop Force-Reload Reload ; do
-    eval "$i() { $SUDO /etc/init.d/\$1 ${i:l} \$2 ; }"
-  done
- fi
-
-  #f1# Provides useful information on globbing
-  H-Glob() {
-  echo -e "
-      /      directories
-      .      plain files
-      @      symbolic links
-      =      sockets
-      p      named pipes (FIFOs)
-      *      executable plain files (0100)
-      %      device files (character or block special)
-      %b     block special files
-      %c     character special files
-      r      owner-readable files (0400)
-      w      owner-writable files (0200)
-      x      owner-executable files (0100)
-      A      group-readable files (0040)
-      I      group-writable files (0020)
-      E      group-executable files (0010)
-      R      world-readable files (0004)
-      W      world-writable files (0002)
-      X      world-executable files (0001)
-      s      setuid files (04000)
-      S      setgid files (02000)
-      t      files with the sticky bit (01000)
-
-   print *(m-1)          # Files modified up to a day ago
-   print *(a1)           # Files accessed a day ago
-   print *(@)            # Just symlinks
-   print *(Lk+50)        # Files bigger than 50 kilobytes
-   print *(Lk-50)        # Files smaller than 50 kilobytes
-   print **/*.c          # All *.c files recursively starting in \$PWD
-   print **/*.c~file.c   # Same as above, but excluding 'file.c'
-   print (foo|bar).*     # Files starting with 'foo' or 'bar'
-   print *~*.*           # All Files that do not contain a dot
-   chmod 644 *(.^x)      # make all plain non-executable files publically readable
-   print -l *(.c|.h)     # Lists *.c and *.h
-   print **/*(g:users:)  # Recursively match all files that are owned by group 'users'
-   echo /proc/*/cwd(:h:t:s/self//) # Analogous to >ps ax | awk '{print $1}'<"
-  }
-  alias help-zshglob=H-Glob
+if [[ -d /etc/init.d ]] ; then
+    for i in Start Restart Stop Force-Reload Reload ; do
+        eval "$i() { $SUDO /etc/init.d/\$1 ${i:l} \$2 ; }"
+    done
+fi
+
+#f1# Provides useful information on globbing
+H-Glob() {
+    echo -e "
+    /      directories
+    .      plain files
+    @      symbolic links
+    =      sockets
+    p      named pipes (FIFOs)
+    *      executable plain files (0100)
+    %      device files (character or block special)
+    %b     block special files
+    %c     character special files
+    r      owner-readable files (0400)
+    w      owner-writable files (0200)
+    x      owner-executable files (0100)
+    A      group-readable files (0040)
+    I      group-writable files (0020)
+    E      group-executable files (0010)
+    R      world-readable files (0004)
+    W      world-writable files (0002)
+    X      world-executable files (0001)
+    s      setuid files (04000)
+    S      setgid files (02000)
+    t      files with the sticky bit (01000)
+
+  print *(m-1)          # Files modified up to a day ago
+  print *(a1)           # Files accessed a day ago
+  print *(@)            # Just symlinks
+  print *(Lk+50)        # Files bigger than 50 kilobytes
+  print *(Lk-50)        # Files smaller than 50 kilobytes
+  print **/*.c          # All *.c files recursively starting in \$PWD
+  print **/*.c~file.c   # Same as above, but excluding 'file.c'
+  print (foo|bar).*     # Files starting with 'foo' or 'bar'
+  print *~*.*           # All Files that do not contain a dot
+  chmod 644 *(.^x)      # make all plain non-executable files publically readable
+  print -l *(.c|.h)     # Lists *.c and *.h
+  print **/*(g:users:)  # Recursively match all files that are owned by group 'users'
+  echo /proc/*/cwd(:h:t:s/self//) # Analogous to >ps ax | awk '{print $1}'<"
+}
+alias help-zshglob=H-Glob
 
-  type -p qma &>/dev/null && alias ?='qma zshall'
+check_com -c qma && alias ?='qma zshall'
 
-  # grep for running process, like: 'any vim'
-  any() {
-  if [[ -z "$1" ]] ; then
-     echo "any - grep for process(es) by keyword" >&2
-     echo "Usage: any <keyword>" >&2 ; return 1
-  else
-     local STRING=$1
-     local LENGTH=$(expr length $STRING)
-     local FIRSCHAR=$(echo $(expr substr $STRING 1 1))
-     local REST=$(echo $(expr substr $STRING 2 $LENGTH))
-     ps xauwww| grep "[$FIRSCHAR]$REST"
-  fi
-  }
+# grep for running process, like: 'any vim'
+any() {
+    if [[ -z "$1" ]] ; then
+        echo "any - grep for process(es) by keyword" >&2
+        echo "Usage: any <keyword>" >&2 ; return 1
+    else
+        local STRING=$1
+        local LENGTH=$(expr length $STRING)
+        local FIRSCHAR=$(echo $(expr substr $STRING 1 1))
+        local REST=$(echo $(expr substr $STRING 2 $LENGTH))
+        ps xauwww| grep "[$FIRSCHAR]$REST"
+    fi
+}
 
-  # After resuming from suspend, system is paging heavily, leading to very bad interactivity.
-  # taken from $LINUX-KERNELSOURCE/Documentation/power/swsusp.txt
-  [[ -r /proc/1/maps ]] && deswap() {
-     print 'Reading /proc/[0-9]*/maps and sending output to /dev/null, this might take a while.'
-     cat $(sed -ne 's:.* /:/:p' /proc/[0-9]*/maps | sort -u | grep -v '^/dev/')  > /dev/null
-     print 'Finished, running "swapoff -a; swapon -a" may also be useful.'
-  }
+# After resuming from suspend, system is paging heavily, leading to very bad interactivity.
+# taken from $LINUX-KERNELSOURCE/Documentation/power/swsusp.txt
+[[ -r /proc/1/maps ]] && \
+deswap() {
+    print 'Reading /proc/[0-9]*/maps and sending output to /dev/null, this might take a while.'
+    cat $(sed -ne 's:.* /:/:p' /proc/[0-9]*/maps | sort -u | grep -v '^/dev/')  > /dev/null
+    print 'Finished, running "swapoff -a; swapon -a" may also be useful.'
+}
 
-  # print hex value of a number
-  hex() {
+# print hex value of a number
+hex() {
     [[ -n "$1" ]] && printf "%x\n" $1 || { print 'Usage: hex <number-to-convert>' ; return 1 }
-  }
+}
 
-  # calculate (or eval at all ;-)) with perl => p[erl-]eval
-  # hint: also take a look at zcalc -> 'autoload zcalc' -> 'man zshmodules | less -p MATHFUNC'
-  peval() {
+# calculate (or eval at all ;-)) with perl => p[erl-]eval
+# hint: also take a look at zcalc -> 'autoload zcalc' -> 'man zshmodules | less -p MATHFUNC'
+peval() {
     [[ -n "$1" ]] && CALC="$*" || print "Usage: calc [expression]"
     perl -e "print eval($CALC),\"\n\";"
-  }
-  functions peval &>/dev/null && alias calc=peval
+}
+functions peval &>/dev/null && alias calc=peval
 
-  # brltty seems to have problems with utf8 environment and/or font Uni3-Terminus16 under
-  # certain circumstances, so work around it, no matter which environment we have
-  brltty() {
+# brltty seems to have problems with utf8 environment and/or font Uni3-Terminus16 under
+# certain circumstances, so work around it, no matter which environment we have
+brltty() {
     if [[ -z "$DISPLAY" ]] ; then
-       consolechars -f /usr/share/consolefonts/default8x16.psf.gz
-       command brltty "$@"
+        consolechars -f /usr/share/consolefonts/default8x16.psf.gz
+        command brltty "$@"
     else
-       command brltty "$@"
+        command brltty "$@"
     fi
-  }
+}
 
-  # just press 'asdf' keys to toggle between dvorak and us keyboard layout
-  aoeu() {
-     echo -n 'Switching to us keyboard layout: '
-     [[ -z "$DISPLAY" ]] && $SUDO loadkeys us &>/dev/null || setxkbmap us &>/dev/null
-     echo 'Done'
-  }
-  asdf() {
-     echo -n 'Switching to dvorak keyboard layout: '
-     [[ -z "$DISPLAY" ]] && $SUDO loadkeys dvorak &>/dev/null || setxkbmap dvorak &>/dev/null
-     echo 'Done'
-  }
-  # just press 'asdf' key to toggle from neon layout to us keyboard layout
-  uiae() {
-     echo -n 'Switching to us keyboard layout: '
-     setxkbmap us && echo 'Done' || echo 'Failed'
-  }
+# just press 'asdf' keys to toggle between dvorak and us keyboard layout
+aoeu() {
+    echo -n 'Switching to us keyboard layout: '
+    [[ -z "$DISPLAY" ]] && $SUDO loadkeys us &>/dev/null || setxkbmap us &>/dev/null
+    echo 'Done'
+}
+asdf() {
+    echo -n 'Switching to dvorak keyboard layout: '
+    [[ -z "$DISPLAY" ]] && $SUDO loadkeys dvorak &>/dev/null || setxkbmap dvorak &>/dev/null
+    echo 'Done'
+}
+# just press 'asdf' key to toggle from neon layout to us keyboard layout
+uiae() {
+    echo -n 'Switching to us keyboard layout: '
+    setxkbmap us && echo 'Done' || echo 'Failed'
+}
 
-  # set up an ipv6 tunnel
-  ipv6-tunnel() {
+# set up an ipv6 tunnel
+ipv6-tunnel() {
     case $1 in
-      start)
-       if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
-          print 'ipv6 tunnel already set up, nothing to be done.'
-          print 'execute: "ifconfig sit1 down ; ifconfig sit0 down" to remove ipv6-tunnel.' ; return 1
-       else
-          [[ -n "$PUBLIC_IP" ]] || local PUBLIC_IP=$(ifconfig $(route -n | awk '/^0\.0\.0\.0/{print $8; exit}') | \
-                                             awk '/inet addr:/ {print $2}' | tr -d 'addr:')
-          [[ -n "$PUBLIC_IP" ]] || { print 'No $PUBLIC_IP set and could not determine default one.' ; return 1 }
-          local IPV6ADDR=$(printf "2002:%02x%02x:%02x%02x:1::1" $(print ${PUBLIC_IP//./ }))
-          print -n "Setting up ipv6 tunnel $IPV6ADDR via ${PUBLIC_IP}: "
-          ifconfig sit0 tunnel ::192.88.99.1 up
-          ifconfig sit1 add "$IPV6ADDR" && print done || print failed
-       fi
-       ;;
-      status)
-       if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
-          print 'ipv6 tunnel available' ; return 0
-       else
-          print 'ipv6 tunnel not available' ; return 1
-       fi
-       ;;
-      stop)
-       if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
-          print -n 'Stopping ipv6 tunnel (sit0 + sit1): '
-          ifconfig sit1 down ; ifconfig sit0 down && print done || print failed
-       else
-          print 'No ipv6 tunnel found, nothing to be done.' ; return 1
-       fi
-       ;;
-      *)
-       print "Usage: ipv6-tunnel [start|stop|status]">&2 ; return 1
-       ;;
+        start)
+            if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
+                print 'ipv6 tunnel already set up, nothing to be done.'
+                print 'execute: "ifconfig sit1 down ; ifconfig sit0 down" to remove ipv6-tunnel.' ; return 1
+            else
+                [[ -n "$PUBLIC_IP" ]] || \
+                    local PUBLIC_IP=$(ifconfig $(route -n | awk '/^0\.0\.0\.0/{print $8; exit}') | \
+                                      awk '/inet addr:/ {print $2}' | tr -d 'addr:')
+
+                [[ -n "$PUBLIC_IP" ]] || { print 'No $PUBLIC_IP set and could not determine default one.' ; return 1 }
+                local IPV6ADDR=$(printf "2002:%02x%02x:%02x%02x:1::1" $(print ${PUBLIC_IP//./ }))
+                print -n "Setting up ipv6 tunnel $IPV6ADDR via ${PUBLIC_IP}: "
+                ifconfig sit0 tunnel ::192.88.99.1 up
+                ifconfig sit1 add "$IPV6ADDR" && print done || print failed
+            fi
+            ;;
+        status)
+            if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
+                print 'ipv6 tunnel available' ; return 0
+            else
+                print 'ipv6 tunnel not available' ; return 1
+            fi
+            ;;
+        stop)
+            if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
+                print -n 'Stopping ipv6 tunnel (sit0 + sit1): '
+                ifconfig sit1 down ; ifconfig sit0 down && print done || print failed
+            else
+                print 'No ipv6 tunnel found, nothing to be done.' ; return 1
+            fi
+            ;;
+        *)
+            print "Usage: ipv6-tunnel [start|stop|status]">&2 ; return 1
+            ;;
     esac
-  }
+}
 
-  # run dhclient for wireless device
-  iwclient() {
+# run dhclient for wireless device
+iwclient() {
     salias dhclient "$(wavemon -d | awk '/device/{print $2}')"
-  }
+}
 
-  # spawn a minimally set up ksh - useful if you want to umount /usr/.
-  minimal-shell() {
+# spawn a minimally set up ksh - useful if you want to umount /usr/.
+minimal-shell() {
     exec env -i ENV="/etc/minimal-shellrc" HOME="$HOME" TERM="$TERM" ksh
-  }
+}
 
-  # make a backup of a file
-  bk() {
+# 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 "$@"
-  # }
-  # restart () {
-  #  exec $SHELL $SHELL_ARGS "$@"
-  # }
+# Switching shell safely and efficiently? http://www.zsh.org/mla/workers/2001/msg02410.html
+# bash() {
+#  NO_SWITCH="yes" command bash "$@"
+# }
+# restart () {
+#  exec $SHELL $SHELL_ARGS "$@"
+# }
 
 # }}}
 
@@ -1612,20 +1724,18 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"."
 # }}}
 
 # {{{ 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 WHITE ; unset $color
 # }}}
 
 # source another config file if present {{{
-  if [[ -r /etc/zsh/zshrc.local ]] ; then
-   source /etc/zsh/zshrc.local
-  fi
+xsource "/etc/zsh/zshrc.local"
 # }}}
 
 # "persistent history" {{{
 # just write important commands you always need to ~/.important_commands
-  if [[ -r ~/.important_commands ]] ; then
-     fc -R ~/.important_commands
-  fi
+if [[ -r ~/.important_commands ]] ; then
+    fc -R ~/.important_commands
+fi
 # }}}
 
 ## genrefcard.pl settings {{{
@@ -1634,7 +1744,7 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"."
 ## }}}
 
 # add variable to be able to check whether the file has been read {{{
-  ZSHRC_GLOBAL_HAS_BEEN_READ=1
+ZSHRC_GLOBAL_HAS_BEEN_READ=1
 # }}}
 
 ## END OF FILE #################################################################