zsh-setup: applied patch from Frank Terbeck for improved
[grml-etc-core.git] / etc / skel / .zshrc
index dedecbd..3afa53b 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: Mon Sep 18 18:54:28 CEST 2006 [mika]
+# Latest change: Son Nov 12 12:23:38 CET 2006 [mika]
 ################################################################################
 
 # source ~/.zshrc.global {{{
   type compinit &>/dev/null || { autoload -U compinit && compinit }
 # }}}
 
+# make sure isgrmlsmall is defined {{{
+  type isgrmlsmall &>/dev/null || function isgrmlsmall () { return 1 }
+# }}}
+
 ## variables {{{
 
+# do you want grmlsmall-specific adjustments?
+  GRMLSMALL_SPECIFIC=1
+
 # set terminal property (used e.g. by msgid-chooser)
   export COLORTERM="yes"
 
 # 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'
-  alias -g '...'='../..'
-  alias -g '....'='../../..'
-# Usage is "$ somecommand C (this pipes it into 'wc -l'):
-  alias -g BG='& exit'
-  alias -g C='|wc -l'
-  alias -g G='|grep'
-  alias -g H='|head'
-  alias -g Hl=' --help |& less -r'
-  alias -g K='|keep'
-  alias -g L='|less'
-  alias -g LL='|& less -r'
-  alias -g M='|most'
-  alias -g N='&>/dev/null'
-  alias -g R='| tr A-z N-za-m'
-  alias -g SL='| sort | less'
-  alias -g S='| sort'
-  alias -g T='|tail'
-  alias -g V='| vim -'
+# Notice: deactivated by 061112 by default, use another approach - see 'power completion'
+#  alias -g '...'='../..'
+#  alias -g '....'='../../..'
+#  alias -g BG='& exit'
+#  alias -g C='|wc -l'
+#  alias -g G='|grep'
+#  alias -g H='|head'
+#  alias -g Hl=' --help |& less -r'
+#  alias -g K='|keep'
+#  alias -g L='|less'
+#  alias -g LL='|& less -r'
+#  alias -g M='|most'
+#  alias -g N='&>/dev/null'
+#  alias -g R='| tr A-z N-za-m'
+#  alias -g SL='| sort | less'
+#  alias -g S='| sort'
+#  alias -g T='|tail'
+#  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'
+   'V' '|& vim -'
+   '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'
+  )
+  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
 # }}}
 
 ## aliases {{{
 
 # console stuff
   alias cmplayer='mplayer -vo fbdev'
-  alias fbmplayer='mplayer -vo fbdev'
+#  alias fbmplayer='mplayer -vo fbdev'
+  alias fbmplayer='mplayer -vo fbdev -fs -zoom'
   alias fblinks='links2 -driver fb'
 
 # ignore ~/.ssh/known_hosts entries
   [ -d ~/.terminfo/ ] && alias man='TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man'
 
 # check whether Debian's package management (dpkg) is running
-  alias check_dpkg_running="sudo dpkg_running"
+  alias check_dpkg_running="$SUDO dpkg_running"
 # }}}
 
 ## useful functions {{{
   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
+
 # Function Usage: doc packagename
   doc() { cd /usr/share/doc/$1 && ls }
   _doc() { _files -W /usr/share/doc -/ }
 # debian upgrade
   upgrade () {
     if [ -z $1 ] ; then
-        sudo apt-get update
-        sudo apt-get -u upgrade
+        $SUDO apt-get update
+        $SUDO apt-get -u upgrade
     else
-        ssh $1 sudo apt-get update
+        ssh $1 $SUDO apt-get update
         # ask before the upgrade
         local dummy
-        ssh $1 sudo apt-get --no-act upgrade
+        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
+            ssh $1 $SUDO apt-get -u upgrade --yes
         fi
     fi
   }
   suidfind() { ls -latg $path/*(sN) }
 
 # See above but this is /better/ ... anywise ..
-#  Note: Add $USER and 'find' with "NOPASSWD" in your /etc/sudoers or run it
-#        as root (UID == 0)
   findsuid() {
-    if [ UID != 0 ] ; then
-      print 'Not running as root. Trying to run via sudo...'
-      RUNASROOT=sudo
-    fi
-        print 'Output will be written to ~/suid_* ...'
-        $RUNASROOT find / -type f \( -perm -4000 -o -perm -2000 \) -ls > ~/suid_suidfiles.`date "+%Y-%m-%d"`.out 2>&1
-        $RUNASROOT find / -type d \( -perm -4000 -o -perm -2000 \) -ls > ~/suid_suiddirs.`date "+%Y-%m-%d"`.out 2>&1
-        $RUNASROOT find / -type f \( -perm -2 -o -perm -20 \) -ls > ~/suid_writefiles.`date "+%Y-%m-%d"`.out 2>&1
-        $RUNASROOT find / -type d \( -perm -2 -o -perm -20 \) -ls > ~/suid_writedirs.`date "+%Y-%m-%d"`.out 2>&1
-        print 'Finished'
+    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'
   }
 
 # Reload functions.
 
 # get x-lite voip software
   getxlite() {
-   [ -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
-   else
-     echo "Error while downloading." ; return 1
-   fi
-   if [ -x xten-xlite/xtensoftphone ] ; then
-     echo "Execute xten-xlite/xtensoftphone to start xlite."
-   fi
+    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
+    else
+       echo "Error while downloading." ; return 1
+    fi
+    if [ -x xten-xlite/xtensoftphone ] ; then
+       echo "Execute xten-xlite/xtensoftphone to start xlite."
+    fi
    }
 
 # get skype
   getskype() {
-   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
-   # mkdir skype.install
-   # dpkg-deb --extract skype_*.deb skype.install/
-   # dpkg-deb --control skype_*.deb skype.install/DEBIAN
-   # sed -i 's/libqt3c102-mt/libqt3-mt/' skype.install/DEBIAN/control
-   # dpkg --build skype.install
-   sudo dpkg -i skype_debian-*.deb && echo "skype installed."
+    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_debian-*.deb && echo "skype installed."
   }
 
 # get beta-version of skype
   getskypebeta() {
-   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."
+    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."
   }
 
 # get gzimo (voicp software)
   getgizmo() {
+    setopt local_options
+    setopt errreturn
     echo "gconf2-common and libgconf2-4 have to be available. Installing therefor."
-    sudo apt-get update
-    sudo apt-get install gconf2-common libgconf2-4
+    $SUDO apt-get update
+    $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."
+    $SUDO dpkg -i libsipphoneapi*.deb bonjour_*.deb gizmo-*.deb && echo "gizmo installed."
   }
 
 # get AIR - Automated Image and Restore
   getair() {
+    setopt local_options
+    setopt errreturn
     [ -w . ] || { echo 'Error: you do not have write permissions in this directory. Exiting.' ; return 1 }
     local VER='1.2.8'
     wget http://puzzle.dl.sourceforge.net/sourceforge/air-imager/air-$VER.tar.gz
     tar zxf air-$VER.tar.gz
     cd air-$VER
-    INTERACTIVE=no sudo ./install-air-1.2.8
-    [ -x /usr/local/bin/air ] && [ -n "$DISPLAY" ] && sudo air
+    INTERACTIVE=no $SUDO ./install-air-1.2.8
+    [ -x /usr/local/bin/air ] && [ -n "$DISPLAY" ] && $SUDO air
   }
 
 # get specific git commitdiff
     indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs $*
   }
 
+# highlight important stuff in diff output, usage example: hg diff | hidiff
+  [ -x =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
   exirename() {
        fi
     fi
   }
+# }}}
+
+# mercurial related stuff {{{
+  if type -p hg >/dev/null 2>&1 ; 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
+  #   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
+      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