-# set up an ipv6 tunnel
-ipv6-tunnel() {
- emulate -L zsh
- case $1 in
- start)
- if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
- print 'ipv6 tunnel already set up, nothing to be done.'
- print 'execute: "ifconfig sit1 down ; ifconfig sit0 down" to remove ipv6-tunnel.' ; return 1
- else
- [[ -n "$PUBLIC_IP" ]] || \
- local PUBLIC_IP=$(ifconfig $(route -n | awk '/^0\.0\.0\.0/{print $8; exit}') | \
- awk '/inet addr:/ {print $2}' | tr -d 'addr:')
-
- [[ -n "$PUBLIC_IP" ]] || { print 'No $PUBLIC_IP set and could not determine default one.' ; return 1 }
- local IPV6ADDR=$(printf "2002:%02x%02x:%02x%02x:1::1" $(print ${PUBLIC_IP//./ }))
- print -n "Setting up ipv6 tunnel $IPV6ADDR via ${PUBLIC_IP}: "
- ifconfig sit0 tunnel ::192.88.99.1 up
- ifconfig sit1 add "$IPV6ADDR" && print done || print failed
- fi
- ;;
- status)
- if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
- print 'ipv6 tunnel available' ; return 0
- else
- print 'ipv6 tunnel not available' ; return 1
- fi
- ;;
- stop)
- if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
- print -n 'Stopping ipv6 tunnel (sit0 + sit1): '
- ifconfig sit1 down ; ifconfig sit0 down && print done || print failed
- else
- print 'No ipv6 tunnel found, nothing to be done.' ; return 1
- fi
- ;;
- *)
- print "Usage: ipv6-tunnel [start|stop|status]">&2 ; return 1
- ;;
- esac
-}
-
-# run dhclient for wireless device
-iwclient() {
- salias dhclient "$(wavemon -d | awk '/device/{print $2}')"
-}
-
-# spawn a minimally set up ksh - useful if you want to umount /usr/.
-minimal-shell() {
- exec env -i ENV="/etc/minimal-shellrc" HOME="$HOME" TERM="$TERM" ksh
-}
-
-# a wrapper for vim, that deals with title setting
-# VIM_OPTIONS
-# set this array to a set of options to vim you always want
-# to have set when calling vim (in .zshrc.local), like:
-# VIM_OPTIONS=( -p )
-# This will cause vim to send every file given on the
-# commandline to be send to it's own tab (needs vim7).
-vim() {
- VIM_PLEASE_SET_TITLE='yes' command vim ${VIM_OPTIONS} "$@"
-}
-
-# make a backup of a file
-bk() {
- cp -a "$1" "${1}_$(date --iso-8601=seconds)"
-}
-
-#f1# grep for patterns in grml's zsh setup
-zg() {
-#{{{
- LANG=C perl -e '
-
-sub usage {
- print "usage: zg -[anr] <pattern>\n";
- print " Search for patterns in grml'\''s zshrc.\n";
- print " zg takes no or exactly one option plus a non empty pattern.\n\n";
- print " options:\n";
- print " -- no options (use if your pattern starts in with a dash.\n";
- print " -a search for the pattern in all code regions\n";
- print " -n search for the pattern in non-root code only\n";
- print " -r search in code for everyone (also root) only\n\n";
- print " The default is -a for non-root users and -r for root.\n\n";
- print " If you installed the zshrc to a non-default locations (ie *NOT*\n";
- print " in /etc/zsh/zshrc) do: export GRML_ZSHRC=\$HOME/.zshrc\n";
- print " ...in case you copied the file to that location.\n\n";
- exit 1;
-}
-
-if ($ENV{GRML_ZSHRC} ne "") {
- $RC = $ENV{GRML_ZSHRC};
-} else {
- $RC = "/etc/zsh/zshrc";
-}
-
-usage if ($#ARGV < 0 || $#ARGV > 1);
-if ($> == 0) { $mode = "allonly"; }
-else { $mode = "all"; }
-
-$opt = $ARGV[0];
-if ($opt eq "--") { shift; }
-elsif ($opt eq "-a") { $mode = "all"; shift; }
-elsif ($opt eq "-n") { $mode = "nonroot"; shift; }
-elsif ($opt eq "-r" ) { $mode = "allonly"; shift; }
-elsif ($opt =~ m/^-/ || $#ARGV > 0) { usage(); }
-
-$pattern = $ARGV[0];
-usage() if ($pattern eq "");
-
-open FH, "<$RC" or die "zg: Could not open $RC: $!\n";
-while ($line = <FH>) {
- chomp $line;
- if ($line =~ m/^#:grep:marker:for:mika:/) { $markerfound = 1; next; }
- next if ($mode eq "nonroot" && markerfound == 0);
- break if ($mode eq "allonly" && markerfound == 1);
- print $line, "\n" if ($line =~ /$pattern/);
-}
-close FH;
-exit 0;
-
- ' -- "$@"
-#}}}
- return $?
-}
-
-# }}}
-
-# {{{ make sure our environment is clean regarding colors
-for color in BLUE RED GREEN CYAN YELLOW MAGENTA WHITE ; unset $color
-# }}}
-
-# "persistent history" {{{
-# just write important commands you always need to ~/.important_commands
-if [[ -r ~/.important_commands ]] ; then
- fc -R ~/.important_commands
-fi
-# }}}
-
-#: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"
-
-# arch/tla stuff
-if check_com -c tla ; then
- #a2# Execute \kbd{tla what-changed --diffs | less}
- alias tdi='tla what-changed --diffs | less'
- #a2# Execute \kbd{tla-buildpackage}
- alias tbp='tla-buildpackage'
- #a2# Execute \kbd{tla archive-mirror}
- alias tmi='tla archive-mirror'
- #a2# Execute \kbd{tla commit}
- alias tco='tla commit'
- #a2# Execute \kbd{tla star-merge}
- alias tme='tla star-merge'
-fi
-
-# 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 *(@[1,10])' # only symlinks
-#a2# Display only executables
-alias lsx='ls -l *(*[1,10])' # 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'
-
-check_com -c ipython && alias ips='ipython -p sh'
-
-# 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'
-
-# check whether Debian's package management (dpkg) is running
-if check_com salias ; then
- #a2# Check whether a dpkg instance is currently running
- salias check_dpkg_running="dpkg_running"
-fi
-
-# 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 tar file
-shtar() {
- emulate -L zsh
- gunzip -c $1 | tar -tf - -- | $PAGER
-}
-#f5# Show contents of tgz file
-shtgz() {
- emulate -L zsh
- tar -ztf $1 | $PAGER
-}
-#f5# Show contents of zip file
-shzip() {
- emulate -L zsh
- unzip -l $1 | $PAGER
-}
-#f5# Greps signature from file
-sig() {
- emulate -L zsh
- agrep -d '^-- $' "$*" ~/.Signature
-}
-#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" "${@:--}"
-}
-
-# download video from youtube
-ytdl() {
- emulate -L zsh
- 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: 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. .. than not.."