added function iwclient
[grml-etc-core.git] / etc / skel / .zshrc
index 0d4a52f..1e4dc02 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: Don Nov 30 17:03:28 CET 2006 [mika]
+# Latest change: Don Mai 31 17:19:00 CEST 2007 [mika]
 ################################################################################
 
 # source ~/.zshrc.global {{{
   fi
 # }}}
 
+# 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
+# }}}
+
+# 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 }
+#  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 }
@@ -35,9 +47,9 @@
 # set default browser
   if [ -z "$BROWSER" ] ; then
      if [ -n "$DISPLAY" ] ; then
-        [ -x =firefox ] && export BROWSER=firefox
+        [ -x $(which firefox) ] && export BROWSER=firefox
      else
-        [ -x =w3m ] && export BROWSER=w3m
+        [ -x $(which w3m) ] && export BROWSER=w3m
      fi
   fi
   (( ${+PAGER} ))   || export PAGER="less"
 # some useful aliases
   alias md='mkdir -p'
 
+  [ -x $(which ipython) ] && alias ips='ipython -p sh'
+
 # console stuff
   alias cmplayer='mplayer -vo fbdev'
   alias fbmplayer='mplayer -vo fbdev -fs -zoom'
 # ignore ~/.ssh/known_hosts entries
 #  alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "PreferredAuthentications=keyboard-interactive"'
   alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
+  alias insecscp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
 
 # use colors when browsing man pages (if not using pinfo or PAGER=most)
   [ -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"
+  type salias &>/dev/null && salias check_dpkg_running="dpkg_running"
+
+# work around non utf8 capable software in utf environment
+  if type isutfenv &>/dev/null ; then
+     if [ -x $(which mrxvt) ] ; then
+        isutfenv && [ -n "$LANG" ] && alias mrxvt="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} mrxvt"
+     fi
+   
+     if [ -x $(which aterm) ] ; then
+        isutfenv && [ -n "$LANG" ] && alias aterm="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} aterm"
+     fi
+   
+     if [ -x $(which centericq) ] ; then
+        isutfenv && [ -n "$LANG" ] && alias centericq="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} centericq"
+     fi
+  fi
 # }}}
 
 ## useful functions {{{
   fir()     { firefox -a firefox -remote "openURL($1)" }
   ggogle()  { ${=BROWSER} "http://groups.google.com/groups?q=$*" }
   google()  { ${=BROWSER} "http://www.google.com/search?&num=100&q=$*" }
+  mcd()     { mkdir -p "$@"; cd "$@" } # mkdir && cd
   mdiff()   { diff -udrP "$1" "$2" > diff.`date "+%Y-%m-%d"`."$1" }
   memusage(){ ps aux | awk '{if (NR > 1) print $5; if (NR > 2) print "+"} END { print "p" }' | dc }
   mggogle() { ${=BROWSER} "http://groups.google.com/groups?selm=$*" }
 
   which google &>/dev/null && gex () { google "\"[ $1]\" $*" } # exact search at google
 
+  # download video from youtube
+  ytdl() {
+    if ! [ -n "$2" ] ; then
+       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=*}
+    fi
+  }
+
+
 # Function Usage: doc packagename
   doc() { cd /usr/share/doc/$1 && ls }
   _doc() { _files -W /usr/share/doc -/ }
-  compdef _doc doc
+  type compdef &>/dev/null && compdef _doc doc
 
 # make screenshot of current desktop (use 'import' from ImageMagic)
   sshot() {
         print -z "${cmd[$answer]#*$TAB}"
   }
 
-# mkdir && cd
-  mcd() { mkdir -p "$@"; cd "$@" }  # mkdir && cd
-
-# cd && ls
-  cl() { cd $1 && ls -a }
-
 # Use vim to convert plaintext to HTML
   2html() { vim -u NONE -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 &>/dev/null }
 
   }
 
 # highlight important stuff in diff output, usage example: hg diff | hidiff
-  [ -x =histring ] && \
+  [ -x $(which 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
        fi
     fi
   }
+
+# open file in vim and jump to line
+# http://www.downgra.de/archives/2007/05/08/T19_21_11/
+  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() {
+    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}
+    else
+      print "usage:\n  $0 <imap-server> [port]"
+    fi
+  }
+
+# creates a Maildir/ with its {new,cur,tmp} subdirs
+  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() {
+    if [[ -z ${DISPLAY} ]] ; then
+      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
+    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 $(which 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
+    }
+    # ... 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
+    }
+    function _hl_complete() {
+      _arguments -s '1: :_hl_genarg' '2:files:_path_files'
+    }
+    compdef _hl_complete hl
+  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'
+}
+
+# change fluxbox keys from 'Alt-#' to 'Alt-F#' and vice versa
+  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
+    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
+    fi
+  }
+
 # }}}
 
 # mercurial related stuff {{{
   # build debian package
     alias hbp='hg-buildpackage'
 
+  # 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
 
 # Work around ion/xterm resize bug.
 #if [ "$SHLVL" = 1 ]; then
-#       if [ -x `which resize 2>/dev/null` ]; then
+#       if [ -x $(which resize) ]; then
 #               eval `resize </dev/null`
 #       fi
 #fi