+# load the lookup subsystem if it's available on the system
+zrcautoload lookupinit && lookupinit
+
+#:grep:marker:for:mika: :-)
+### non-root (EUID != 0) code below
+###
+
+if (( GRML_ALWAYS_LOAD_ALL == 0 )) && (( $EUID == 0 )) ; then
+ zrclocal
+ return 0
+fi
+
+# variables {{{
+
+# set terminal property (used e.g. by msgid-chooser)
+export COLORTERM="yes"
+
+# set default browser
+if [[ -z "$BROWSER" ]] ; then
+ if [[ -n "$DISPLAY" ]] ; then
+ #v# If X11 is running
+ check_com -c firefox && export BROWSER=firefox
+ else
+ #v# If no X11 is running
+ check_com -c w3m && export BROWSER=w3m
+ fi
+fi
+
+#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
+# }}}
+
+# aliases {{{
+
+# 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"'
+
+# general
+#a2# Execute \kbd{du -sch}
+alias da='du -sch'
+#a2# Execute \kbd{jobs -l}
+alias j='jobs -l'
+
+# compile stuff
+#a2# Execute \kbd{./configure}
+alias CO="./configure"
+#a2# Execute \kbd{./configure --help}
+alias CH="./configure --help"
+
+# 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 *(@)' # only symlinks
+#a2# Display only executables
+alias lsx='ls -l *(*)' # 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 -rtlh *(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'
+
+# some useful aliases
+#a2# Execute \kbd{mkdir -o}
+alias md='mkdir -p'
+
+# 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# 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"'
+
+# simple webserver
+check_com -c python && alias http="python -m SimpleHTTPServer"
+
+# Use 'g' instead of 'git':
+check_com g || alias g='git'
+
+# work around non utf8 capable software in utf environment via $LANG and luit
+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
+debbug() {
+ emulate -L zsh
+ setopt extendedglob
+ if [[ $# -eq 1 ]]; then
+ case "$1" in
+ ([0-9]##)
+ ${=BROWSER} "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=$1"
+ ;;
+ (*@*)
+ ${=BROWSER} "http://bugs.debian.org/cgi-bin/pkgreport.cgi?submitter=$1"
+ ;;
+ (*)
+ ${=BROWSER} "http://bugs.debian.org/$*"
+ ;;
+ esac
+ else
+ print "$0 needs one argument"
+ return 1
+ fi
+}
+#f4# Search Debian Bug Tracking System in mbox format
+debbugm() {
+ emulate -L zsh
+ bts show --mbox $1
+}
+#f4# Search DMOZ
+dmoz() {
+ emulate -L zsh
+ ${=BROWSER} http://search.dmoz.org/cgi-bin/search\?search=${1// /_}
+}
+#f4# Search German Wiktionary
+dwicti() {
+ emulate -L zsh
+ ${=BROWSER} http://de.wiktionary.org/wiki/${(C)1// /_}
+}
+#f4# Search English Wiktionary
+ewicti() {
+ emulate -L zsh
+ ${=BROWSER} http://en.wiktionary.org/wiki/${(C)1// /_}
+}
+#f4# Search Google Groups
+ggogle() {
+ emulate -L zsh
+ ${=BROWSER} "http://groups.google.com/groups?q=$*"
+}
+#f4# Search Google
+google() {
+ emulate -L zsh
+ ${=BROWSER} "http://www.google.com/search?&num=100&q=$*"
+}
+#f4# Search Google Groups for MsgID
+mggogle() {
+ emulate -L zsh
+ ${=BROWSER} "http://groups.google.com/groups?selm=$*"
+}
+#f4# Search Netcraft
+netcraft(){
+ emulate -L zsh
+ ${=BROWSER} "http://toolbar.netcraft.com/site_report?url=$1"
+}
+#f4# Use German Wikipedia's full text search
+swiki() {
+ emulate -L zsh
+ ${=BROWSER} http://de.wikipedia.org/wiki/Spezial:Search/${(C)1}
+}
+#f4# search \kbd{dict.leo.org}
+oleo() {
+ emulate -L zsh
+ ${=BROWSER} "http://dict.leo.org/?search=$*"
+}
+#f4# Search German Wikipedia
+wikide() {
+ emulate -L zsh
+ ${=BROWSER} http://de.wikipedia.org/wiki/"${(C)*}"
+}
+#f4# Search English Wikipedia
+wikien() {
+ emulate -L zsh
+ ${=BROWSER} http://en.wikipedia.org/wiki/"${(C)*}"
+}
+#f4# Search official debs
+wodeb() {
+ emulate -L zsh
+ ${=BROWSER} "http://packages.debian.org/search?keywords=$1&searchon=contents&suite=${2:=unstable}§ion=all"
+}
+
+#m# f4 gex() Exact search via Google
+check_com google && gex () {
+ google "\"[ $1]\" $*"
+}
+
+# misc
+#f5# Backup \kbd{file {\rm to} file\_timestamp}
+bk() {
+ emulate -L zsh
+ cp -b $1 $1_`date --iso-8601=m`
+}
+#f5# Copied diff
+cdiff() {
+ emulate -L zsh
+ diff -crd "$@" | egrep -v "^Only in |^Binary files "
+}
+#f5# cd to directoy and list files
+cl() {
+ emulate -L zsh
+ cd $1 && ls -a
+}
+#f5# Cvs add
+cvsa() {
+ emulate -L zsh
+ cvs add $* && cvs com -m 'initial checkin' $*
+}
+#f5# Cvs diff
+cvsd() {
+ emulate -L zsh
+ cvs diff -N $* |& $PAGER
+}
+#f5# Cvs log
+cvsl() {
+ emulate -L zsh
+ cvs log $* |& $PAGER
+}
+#f5# Cvs update
+cvsq() {
+ emulate -L zsh
+ cvs -nq update
+}
+#f5# Rcs2log
+cvsr() {
+ emulate -L zsh
+ rcs2log $* | $PAGER
+}
+#f5# Cvs status
+cvss() {
+ emulate -L zsh
+ cvs status -v $*
+}
+#f5# Disassemble source files using gcc and as
+disassemble(){
+ emulate -L zsh
+ gcc -pipe -S -o - -O -g $* | as -aldh -o /dev/null
+}
+#f5# Firefox remote control - open given URL
+fir() {
+ if [ -e /etc/debian_version ]; then
+ firefox -a iceweasel -remote "openURL($1)" || firefox ${1}&
+ else
+ firefox -a firefox -remote "openURL($1)" || firefox ${1}&
+ fi
+}
+#f5# Create Directoy and \kbd{cd} to it
+mcd() {
+ mkdir -p "$@" && 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 gzipped tar file
+shtar() {
+ emulate -L zsh
+ gunzip -c $1 | tar -tf - -- | $PAGER
+}
+#f5# Show contents of zip file
+shzip() {
+ emulate -L zsh
+ unzip -l $1 | $PAGER
+}
+#f5# Unified diff
+udiff() {
+ emulate -L zsh
+ diff -urd $* | egrep -v "^Only in |^Binary files "
+}
+#f5# (Mis)use \kbd{vim} as \kbd{less}
+viless() {
+ emulate -L zsh
+ vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}"
+}
+
+# Function Usage: uopen $URL/$file
+#f5# Download a file and display it locally
+uopen() {
+ emulate -L zsh
+ if ! [[ -n "$1" ]] ; then
+ print "Usage: uopen \$URL/\$file">&2
+ return 1
+ else
+ FILE=$1
+ MIME=$(curl --head $FILE | grep Content-Type | cut -d ' ' -f 2 | cut -d\; -f 1)
+ MIME=${MIME%$'\r'}
+ curl $FILE | see ${MIME}:-
+ fi
+}
+
+# Function Usage: doc packagename
+#f5# \kbd{cd} to /usr/share/doc/\textit{package}
+doc() {
+ emulate -L zsh
+ 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
+}
+
+# list images only
+limg() {
+ local -a images
+ images=( *.{jpg,gif,png}(.N) )
+
+ if [[ $#images -eq 0 ]] ; then
+ print "No image files found"
+ else
+ ls "$images[@]"
+ fi
+}
+
+#f5# Create PDF file from source code
+makereadable() {
+ emulate -L zsh
+ 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() {
+ emulate -L zsh
+ zmodload -i zsh/pcre
+ pcre_compile $1 && \
+ pcre_match $2 && echo "regex matches" || echo "regex does not match"
+}
+
+#f5# List files which have been accessed within the last {\it n} days, {\it n} defaults to 1
+accessed() {
+ emulate -L zsh
+ print -l -- *(a-${1:-1})
+}
+
+#f5# List files which have been changed within the last {\it n} days, {\it n} defaults to 1
+changed() {
+ emulate -L zsh
+ print -l -- *(c-${1:-1})
+}
+
+#f5# List files which have been modified within the last {\it n} days, {\it n} defaults to 1
+modified() {
+ emulate -L zsh
+ print -l -- *(m-${1:-1})
+}
+# modified() was named new() in earlier versions, add an alias for backwards compatibility
+check_com new || alias new=modified
+
+#f5# Grep in history
+greph() {
+ emulate -L zsh
+ 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'
+
+#f5# Watch manpages in a stretched style
+man2() { PAGER='dash -c "sed G | /usr/bin/less"' command man "$@" ; }
+
+# usage example: 'lcheck strcpy'
+#f5# Find out which libs define a symbol
+lcheck() {
+ if [[ -n "$1" ]] ; then
+ nm -go /usr/lib/lib*.a 2>/dev/null | grep ":[[:xdigit:]]\{8\} . .*$1"
+ else
+ echo "Usage: lcheck <function>" >&2
+ 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. .. then not.."
+ fi
+ fi
+}
+
+# Translate DE<=>EN
+# 'translate' looks up fot a word in a file with language-to-language
+# translations (field separator should be " : "). A typical wordlist looks
+# like at follows:
+# | english-word : german-transmission
+# It's also only possible to translate english to german but not reciprocal.
+# Use the following oneliner to turn back the sort order:
+# $ 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() {
+ emulate -L zsh
+ 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
+}
+
+#f5# List all occurrences of programm in current PATH
+plap() {
+ emulate -L zsh
+ 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}"
+}
+
+# Use vim to convert plaintext to HTML
+#f5# Transform files to html with highlighting
+2html() {
+ emulate -L zsh
+ 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 () {
+ emulate -L zsh
+ 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() {
+ emulate -L zsh
+ 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() {
+ emulate -L zsh
+ 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 ;;
+ *.deb) dpkg-deb --fsys-tarfile $1 | tar -tf - -- ;;
+ *) echo "'$1' Error. Please go away" ;;
+ esac
+ else
+ echo "'$1' is not a valid archive"
+ 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() {
+ emulate -L zsh
+ if (( ${#argv} == 0 )); then
+ printf 'usage: vman <topic>\n'
+ return 1
+ fi
+ 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() {
+ emulate -L zsh
+ local files
+ files=(./(#i)*(read*me|lue*m(in|)ut)*(ND))
+ if (($#files)) ; then
+ $PAGER $files
+ else
+ print 'No README files.'
+ fi
+}
+
+# function ansi-colors()
+#f5# Display ANSI colors
+ansi-colors() {
+ typeset esc="\033[" line1 line2
+ echo " _ _ _40 _ _ _41_ _ _ _42 _ _ 43_ _ _ 44_ _ _45 _ _ _ 46_ _ _ 47_ _ _ 49_ _"
+ for fore in 30 31 32 33 34 35 36 37; do
+ line1="$fore "
+ line2=" "
+ for back in 40 41 42 43 44 45 46 47 49; do
+ line1="${line1}${esc}${back};${fore}m Normal ${esc}0m"
+ line2="${line2}${esc}${back};${fore};1m Bold ${esc}0m"
+ done
+ echo -e "$line1\n$line2"
+ done
+}
+
+#f5# Find all files in \$PATH with setuid bit set
+suidfind() { ls -latg $path | grep '^...s' }
+
+# TODO: So, this is the third incarnation of this function!?
+#f5# Reload given functions
+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() {
+ emulate -L zsh
+ 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
+}
+
+# % slow_print `cat /etc/passwd`
+#f5# Slowly print out parameters
+slow_print() {
+ for argument in "$@" ; do
+ for ((i = 1; i <= ${#1} ;i++)) ; do
+ print -n "${argument[i]}"
+ sleep 0.08
+ done
+ 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:+$BAUD bauds, }$COLUMNS x $LINES chars"
+ 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
+}
+
+# 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# Make an audio CD from all mp3 files
+mkaudiocd() {
+ # TODO: do the renaming more zshish, possibly with zmv()
+ emulate -L zsh
+ 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() {
+ emulate -L zsh
+ 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() {
+ rm -rf thumb-* index.html
+ echo "
+<html>
+ <head>
+ <title>Images</title>
+ </head>
+ <body>" > index.html
+ 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() {
+ ulimit -c unlimited
+ ulimit -d unlimited
+ ulimit -f unlimited
+ ulimit -l unlimited
+ ulimit -n unlimited
+ ulimit -s unlimited
+ ulimit -t unlimited
+}
+
+# ogg2mp3 with bitrate of 192
+ogg2mp3_192() {
+ emulate -L zsh
+ oggdec -o - $1 | lame -b 192 - ${1:r}.mp3
+}
+
+#f5# RFC 2396 URL encoding in Z-Shell
+urlencode() {
+ emulate -L zsh
+ setopt extendedglob
+ input=( ${(s::)1} )
+ print ${(j::)input/(#b)([^A-Za-z0-9_.!~*\'\(\)-])/%${(l:2::0:)$(([##16]#match))}}
+}
+
+# http://strcat.de/blog/index.php?/archives/335-Software-sauber-deinstallieren...html
+#f5# Log 'make install' output
+mmake() {
+ emulate -L zsh
+ [[ ! -d ~/.errorlogs ]] && mkdir ~/.errorlogs
+ make -n install > ~/.errorlogs/${PWD##*/}-makelog
+}
+
+#f5# Indent source code
+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
+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() {
+ emulate -L zsh
+ if [[ $# -lt 1 ]] ; then
+ 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
+ fi
+}
+
+# get_ic() - queries imap servers for capabilities; real simple. no imaps
+ic_get() {
+ emulate -L zsh
+ 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() {
+ emulate -L zsh
+ 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}
+}
+
+#f5# Change the xterm title from within GNU-screen
+xtrename() {
+ emulate -L zsh
+ if [[ $1 != "-f" ]] ; then
+ if [[ -z ${DISPLAY} ]] ; then
+ printf 'xtrename only makes sense in X11.\n'
+ return 1
+ fi
+ else
+ shift
+ fi
+ if [[ -z $1 ]] ; then
+ printf 'usage: xtrename [-f] "title for xterm"\n'
+ printf ' renames the title of xterm from _within_ screen.\n'
+ printf ' also works without screen.\n'
+ printf ' will not work if DISPLAY is unset, use -f to override.\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 check_com -c highlight ; then
+ function hl() {
+ emulate -L zsh
+ 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