+#: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 -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'
+
+# 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() {
+ firefox -a firefox -remote "openURL($1)"
+}
+#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 modified within the last {\it n} days
+new() {
+ emulate -L zsh
+ print -l *(m-$1)
+}
+
+#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 "$@" ; }
+
+# d():Copyright 2005 Nikolai Weibull <nikolai@bitwi.se>
+# note: option AUTO_PUSHD has to be set
+#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++ ))
+ 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
+ fi
+ cd ~$dir
+}
+
+# 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
+ 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
+}
+
+# suidfind() { ls -latg $path | grep '^...s' }
+#f5# Find all files in \$PATH with setuid bit set
+suidfind() { ls -latg $path/*(sN) }
+
+# See above but this is /better/ ... anywise ..
+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'
+}
+
+# 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
+}