* /etc/zsh/zshrc:
[grml-etc-core.git] / etc / skel / .zshrc
index f562ed2..0d4a52f 100644 (file)
@@ -3,7 +3,7 @@
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
-# Latest change: Son Nov 12 12:23:38 CET 2006 [mika]
+# Latest change: Don Nov 30 17:03:28 CET 2006 [mika]
 ################################################################################
 
 # source ~/.zshrc.global {{{
 
 ## variables {{{
 
+# do you want grmlsmall-specific adjustments?
+  GRMLSMALL_SPECIFIC=1
+
 # set terminal property (used e.g. by msgid-chooser)
   export COLORTERM="yes"
 
 # set default browser
-  if [ -z $BROWSER ] ; then
+  if [ -z "$BROWSER" ] ; then
      if [ -n "$DISPLAY" ] ; then
         [ -x =firefox ] && export BROWSER=firefox
      else
@@ -66,7 +69,8 @@
 # These do not have to be at the beginning of the command line.
 # Avoid typing cd ../../ for going two dirs down and so on
 # Usage, e.g.: "$ cd ...' or just '$ ...' with 'setopt auto_cd'
-# Notice: deactivated by 061112 by default, use another approach - see 'power completion'
+# Notice: deactivated by 061112 by default, we use another approach
+# known as "power completion / abbreviation expansion"
 #  alias -g '...'='../..'
 #  alias -g '....'='../../..'
 #  alias -g BG='& exit'
 #  alias -g SL='| sort | less'
 #  alias -g S='| sort'
 #  alias -g T='|tail'
-#  isgrmlsmall || alias -g V='| vim -'
-
-# power completion, see http://zshwiki.org/home/examples/zleiab
-# 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
-   'C'    '| wc -l'
-   '...' '../..'
-   '....' '../../..'
-   'BG' '& exit'
-   'C' '|wc -l'
-   'G' '|& grep --color=auto'
-   'H' '|head'
-   'Hl' ' --help |& less -r'
-   'L' '|less'
-   'LL' '|& less -r'
-   'M' '|most'
-   'N' '&>/dev/null'
-   'R' '| tr A-z N-za-m'
-   'SL' '| sort | less'
-   'S' '| sort -u'
-   'T' '|tail'
-   '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"'
-   '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'
-  )
-  isgrmlsmall || abk+=( 'V' '|& vim -')
-  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
+#  alias -g V='| vim -'
 # }}}
 
 ## aliases {{{
   alias conkeror='firefox -chrome chrome://conkeror/content'
 
 # arch/tla stuff
-  alias ldiff='tla what-changed --diffs | less'
-  alias tbp='tla-buildpackage'
-  alias mirror='tla archive-mirror'
-  alias commit='tla commit'
-  alias merge='tla star-merge'
+  if type -p tla &>/dev/null ; then
+     alias tdi='tla what-changed --diffs | less'
+     alias tbp='tla-buildpackage'
+     alias tmi='tla archive-mirror'
+     alias tco='tla commit'
+     alias tme='tla star-merge'
+  fi
 
 # listing stuff
   alias dir="ls -lSrah"
 
 # console stuff
   alias cmplayer='mplayer -vo fbdev'
-#  alias fbmplayer='mplayer -vo fbdev'
   alias fbmplayer='mplayer -vo fbdev -fs -zoom'
   alias fblinks='links2 -driver fb'
 
   cvsr()    { rcs2log $* | $PAGER }
   cvss()    { cvs status -v $* }
   debbug()  { ${=BROWSER} "http://bugs.debian.org/$*" }
-  debbugm() { bts show --mbox $1 } # provide bugnummer as $1
+  debbugm() { bts show --mbox $1 } # provide bugnummer as "$1"
   disassemble(){ gcc -pipe -S -o - -O -g $* | as -aldh -o /dev/null }
   dmoz()    { ${=BROWSER} http://search.dmoz.org/cgi-bin/search\?search=${1// /_} }
   dwicti()  { ${=BROWSER} http://de.wiktionary.org/wiki/${(C)1// /_} }
   sig()     { agrep -d '^-- $' "$*" ~/.Signature }
   swiki()   { ${=BROWSER} http://de.wikipedia.org/wiki/Spezial:Search/${(C)1} }
   udiff()   { diff -urd $* | egrep -v "^Only in |^Binary files " }
-  isgrmlsmall || viless()  { vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}" }
+  viless()  { vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}" }
   wikide () { ${=BROWSER} http://de.wikipedia.org/wiki/"${(C)*}" }
   wikien()  { ${=BROWSER} http://en.wikipedia.org/wiki/"$*" }
   wodeb ()  { ${=BROWSER} "http://packages.debian.org/cgi-bin/search_contents.pl?word=$1&version=${2:-unstable}" }
 
-  which google >/dev/null 2>&1 && gex () { google "\"[ $1]\" $*" } # exact search at google
+  which google &>/dev/null && gex () { google "\"[ $1]\" $*" } # exact search at google
 
 # Function Usage: doc packagename
   doc() { cd /usr/share/doc/$1 && ls }
   _doc() { _files -W /usr/share/doc -/ }
   compdef _doc doc
 
-# debian 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
-  }
-
 # make screenshot of current desktop (use 'import' from ImageMagic)
   sshot() {
         [[ ! -d ~/shots  ]] && mkdir ~/shots
         cd ~/shots ; sleep 5; import -window root shot_`date --iso-8601=m`.jpg
   }
 
-
 # list images only
   limg() {
     local -a images
     fi
   }
 
-
 # create pdf file from source code
   makereadable() {
      output=$1
     pcre_compile $1 && \
     pcre_match $2 && echo "regex matches" || echo "regex does not match"
   }
+
 # list files which have been modified within the last x days
   new() { print -l *(m-$1) }
 
     cd ~$dir
   }
 
-# provide 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)          # Dateien, die vor bis zu einem Tag modifiziert wurden.
-   print *(a1)           # Dateien, auf die vor einem Tag zugegriffen wurde.
-   print *(@)            # Nur Links
-   print *(Lk+50)        # Dateien die ueber 50 Kilobytes grosz sind
-   print *(Lk-50)        # Dateien die kleiner als 50 Kilobytes sind
-   print **/*.c          # Alle *.c - Dateien unterhalb von \$PWD
-   print **/*.c~file.c   # Alle *.c - Dateien, aber nicht 'file.c'
-   print (foo|bar).*     # Alle Dateien mit 'foo' und / oder 'bar' am Anfang
-   print *~*.*           # Nur Dateien ohne '.' in Namen
-   chmod 644 *(.^x)      # make all non-executable files publically readable
-   print -l *(.c|.h)     # Nur Dateien mit dem Suffix '.c' und / oder '.h'
-   print **/*(g:users:)  # Alle Dateien/Verzeichnisse der Gruppe >users<
-   echo /proc/*/cwd(:h:t:s/self//) # Analog zu >ps ax | awk '{print $1}'<"
-  }
-
+# find out which libs define a symbol
+# usage example: 'lcheck strcpy'
   lcheck() {
-   nm -go /usr/lib/lib*.a 2>/dev/null | grep ":[[:xdigit:]]\{8\} . .*$1"":[[:xdigit:]]\{8\} . .*$1"
+     if [ -n "$1" ] ; then
+        nm -go /usr/lib/lib*.a 2>/dev/null | grep ":[[:xdigit:]]\{8\} . .*$1"
+      else
+        echo "Usage: lcheck <function>" >&2
+     fi
   }
 
 # clean up directory
 #  getstrings () { perl -ne 'while ( m/"(.*?)"/gc ) { print $1, "\n"; }' $*}
 #  getanchors () { perl -ne 'while ( m/«([^«»\n]+)»/gc ) { print $1, "\n"; }' $* }
 #  showINC ()    { perl -e 'for (@INC) { printf "%d %s\n", $i++, $_ }' }
-#  isgrmlsmall || vimpm ()      { vim `perldoc -l $1 | sed -e 's/pod$/pm/'` }
-#  isgrmlsmall || vimhelp ()    { vim -c "help $1" -c on -c "au! VimEnter *" }
+#  vimpm ()      { vim `perldoc -l $1 | sed -e 's/pod$/pm/'` }
+#  vimhelp ()    { vim -c "help $1" -c on -c "au! VimEnter *" }
 
 # plap foo -- list all occurrences of program in the current PATH
   plap() {
   cl() { cd $1 && ls -a }
 
 # Use vim to convert plaintext to HTML
-  isgrmlsmall || 2html() { vim -u NONE -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 > /dev/null 2> /dev/null }
+  2html() { vim -u NONE -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 &>/dev/null }
 
 # Usage: simple-extract <file>
 # Description: extracts archived files (maybe)
         fi
   }
 
+# follow symlinks
   folsym() {
     if [[ -e $1 || -h $1 ]]; then
         file=$1
 # Use 'view' to read manpages, if u want colors, regex - search, ...
 # like vi(m).
 # It's shameless stolen from <http://www.vim.org/tips/tip.php?tip_id=167>
-  isgrmlsmall || vman() { man $* | col -b | view -c 'set ft=man nomod nolist' - }
+  vman() { man $* | col -b | view -c 'set ft=man nomod nolist' - }
 
 # search for various types or README file in dir and display them in $PAGER
 # function readme() { $PAGER -- (#ia3)readme* }
 # a small check to see which DIR is located on which server/partition.
 # stolen and modified from Sven's zshrc.forall
   dirspace() {
-        for dir in $path;
-        do
-                (cd $dir; echo "-<$dir>"; du -shx .; echo);
+    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
+    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
         done
+    fi
   }
 
-# $ show_print `cat /etc/passwd`
+# % slow_print `cat /etc/passwd`
   slow_print() {
         for argument in "${@}"
         do
         print ""
   }
 
+# display system state
   status() {
         print ""
         print "Date..: "$(date "+%Y-%m-%d %H:%M:%S")""
         print ""
   }
 
+# Rip an audio CD
   audiorip() {
         mkdir -p ~/ripps
         cd ~/ripps
         fi
   }
 
+# and burn it
   audioburn() {
         cd ~/ripps
         cdrdao write --device $DEVICE --driver generic-mmc audiocd.toc
         fi
   }
 
+# 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 *.wav; do sox $i.wav -r 44100 $i.wav resample; done
   }
 
+# Create an ISO image. You are prompted for volume name, filename and directory
   mkiso() {
         echo " * Volume name "
         read volume
         mkisofs -o ~/$iso -A $volume -allow-multidot -J -R -iso-level 3 -V $volume -R $files
   }
 
-# generate thumbnails ;)
+# simple thumbnails generator
   genthumbs () {
     rm -rf thumb-* index.html
     echo "
     $SUDO dpkg -i skype-beta*.deb && echo "skype installed."
   }
 
-# get gzimo (voicp software)
+# get gzimo (VoIP software)
   getgizmo() {
     setopt local_options
     setopt errreturn
 # }}}
 
 # mercurial related stuff {{{
-  if type -p hg >/dev/null 2>&1 ; then
+  if type -p hg &>/dev/null ; then
   # gnu like diff for mercurial
   # http://www.selenic.com/mercurial/wiki/index.cgi/TipsAndTricks
     hgdi() {
       for i in `hg status -marn "$@"` ; diff -ubwd <(hg cat "$i") "$i"
     }
 
-  # diffstat for specific version of mercurial
+  # build debian package
+    alias hbp='hg-buildpackage'
+
+  # 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
     hgstat() {
       [ -n "$1" ] && hg diff -r $1 -r tip | diffstat || hg export tip | diffstat
     }
 
-  # get current mercurial tip via hg itself and install it in $HOME
-  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
+  # 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
+    }
+
+  fi # end of check whether we have the 'hg'-executable
+
+  # 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
+        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."
-      # echo "Setting \$PYTHONPATH to PYTHONPATH=\${HOME}/lib/python,"
-      # export PYTHONPATH=${HOME}/lib/python
-    fi
-  }
-
-  fi # end of check whether we have the 'hg'-executable
-
-  # get and install current mercurial snapshot in $HOME
-  gethgsnap() {
-    setopt local_options
-    setopt errreturn
-    if [ -f mercurial-snapshot.tar.gz ] ; then
-       echo "mercurial-snapshot.tar.gz exists already, skipping download."
-    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."
-  }
+    }
 # }}}
 
 # some useful commands often hard to remember - let's grep for them {{{
 # print $'\e[?96;0;64c'
 # }}}
 
-# finally source a local zshrc {{{
+# finally source a local zshrc and grmlsmall-specific configuration {{{
+
+# The following file is used to remove zsh-config-items that do not work
+# in grml-small by default.
+# If you do not want these adjustments (for whatever reason),
+# there are three ways to accomplish that:
+#  a) at the beginning of this file (variables section), set
+#     $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
+
 # 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