1  #!/bin/env zsh
  2
  3  #colored messages
  4
  5  sh_coloroff() { echo -en "$reset_color" }
  6  sh_colormsg() { [ -n "$1" ] && echo -en "${fg_bold[white]}${@}${reset_color}" }
  7
  8  sh_error() { echo -e "${fg_bold[red]}[ e ]${reset_color} $@" }
  9  sh_info() { echo -e "${fg_bold[yellow]}[ i ]${reset_color} $@" }
 10  sh_success() { echo -e "${fg_bold[green]}[ k ]${reset_color} $@" }
 11  sh_mesg() { echo -e "${fg_bold[cyan]}[ m ]${reset_color} $@" }
 12
 13  # develop helpers
 14  alias sh_indent='indent -nsaf -npcs -cli2 -i2 -lp -nprs -nsaw -nut -cbi2 -bli0 -bls -nbad -npsl'
 15  alias sh_diff='diff -abBpur'
 16
 17  alias sh_svnstat="svn status | awk '/^[^?]/'"
 18  # use with   svn diff -r `sh_svnprev`
 19  sh_svnprev() { echo $(( `svnversion . | sed 's/[^0-9].*//'` - 1)) }
 20
 21  # $1 - path
 22  sh_fcore()
 23  {
 24    p="."
 25    [ -n "$1" ] && p="$1"
 26    find $p -name "core\.*[[:digit:]]*" -type f 2>& /dev/null
 27    return 0
 28  }
 29
 30  #
 31  # change to a profile written down in $HOME/.myprofiles
 32  #
 33  #   #begin[NAME]
 34  #     FOO=BAR
 35  #     JOHN=DOE
 36  #   #end[NAME]
 37  #
 38  # $1 - name of the profile (a must)
 39  # $2 - name of the profilefile (optional)
 40  sh_myprofile()
 41  {
 42    f=$HOME/.myprofiles
 43    [ -n "$1" ] || return 1
 44    [ -n "$2" ] && f="$2"
 45    sh_info "setting profiles to \"$1\" ... "
 46
 47    sed -n '/^#begin\['$1'\]/,/^#end\['$1'\]/p' "$f" |
 48    while read l
 49    do
 50      eval $l
 51    done
 52    sh_success "done"
 53  }
 54
 55  alias osd='osd_cat -c white -o 20 -l 30'
 56
 57  # mplayer
 58  alias mplayer='mplayer -menu -aop list=volnorm'
 59  alias mmplayer='mplayer -nosound'
 60  alias lmplayer='mplayer -loop 0'
 61  alias mplayerc='mplayer /mnt/cdrom/*'
 62  alias mplayerd='mplayer /mnt/dvd/*'
 63  alias dvdplayer='mplayer -dvd 1 -dvd-device /dev/cdroms/cdrom1'
 64  alias gdvdplayer='gmplayer -dvd 1 -dvd-device /dev/cdroms/cdrom1'
 65
 66  # use last download wallpaper
 67  alias show_latestwp='fbsetbg -f $HOME/.backgrounds/`ls -1t $HOME/.backgrounds/ | head -n 1`'
 68  alias ws="xprop -root | awk '/_WIN_WORKSPACE\(/ {print \$3}' | osd_cat -c white -f -*-lucida-medium-r-*-*-20-*-*-*-*-*-*-* -o 20 -p top -A center"
 69
 70  dubigf() {
 71    du -sh * | awk '/[[:space:]]*[[:digit:]]+,*[[:digit:]]*G/' | sort -nr
 72    du -sh * | awk '/[[:space:]]*[[:digit:]]+,*[[:digit:]]*M/' | sort -nr
 73  }
 74
 75  sh_create_mail_dir() { [ -n "$1" ] && mkdir --parent $1/cur $1/tmp $1/new }
 76  sh_pingip()
 77  {
 78    ping -c 1 "$1" | \
 79      sed 's/^PING.* (\(.*\.[[:digit:]]\+\)).*$/\1/;q'
 80  }
 81
 82  if which nmap 2>&1 > /dev/null; then
 83    # check hosts that are online
 84    sh_whoisonline()
 85    {
 86      if [ -n "$1" ]; then
 87        net="$1"
 88      else
 89        net=$(grep `hostname` /etc/hosts | awk -F '.' '{ print $1"."$2"."$3".0/24"}')
 90      fi
 91      sh_info "testing $net for online boxes"
 92      sudo nmap -sP $net | awk '/Host/ && /up/ { print $0; }'
 93      sh_success "done"
 94    }
 95  fi
 96
 97
 98  sh_ed2k() { wget -q -O - "$1" | grep "ed2k://" |  sed -e 's/^.*=//g;s/..$//g' }
 99
100  sh_fakepass()
101  {
102    local l=8
103    [ -n "$1" ] && l=$1
104    dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | head -n 2 | tail -n 1 | cut -c -$l
105  }
106  alias sh_fakename='nc koeln.ccc.de 23 | cut -d \  -f 4,5'
107
108  sh_noisetimer()
109  {
110    sounds=( $HOME/.sounds/lightning.ogg \
111             $HOME/.sounds/ring.ogg )
112
113    s=$sounds[$((1 + $(($RANDOM % 2)) ))]
114
115    case $# in
116
117      0 );;
118      1 )
119        ( echo "mplayer $s >& /dev/null \n" ) | at $1 >& /dev/null
120        sh_info "ok, noise in $1"
121        ;;
122      * )
123        t=$1;
124        shift 1
125        ( echo "mplayer $s >& /dev/null \nxmessage -display $DISPLAY -nearmouse -timeout 10 $*" ) | \
126        at $t >& /dev/null
127        sh_info "ok, noise in $t"
128        ;;
129
130
131    esac
132  }
133
134  tarcp() {
135
136      if (( $# >= 2 )); then
137
138          echo "copy ${@[1, -2]} => ${@[-1]}"
139
140          # http://www.ivarch.com/programs/pv.shtml
141          if which pv ; then
142              tar -c -f - ${@[1, -2]} | pv -t -b -r | tar -x -f - -C ${@[-1]}
143          else
144              tar -c -v -f - ${@[1, -2]} | tar -x -f - -C ${@[-1]}
145          fi
146      else
147          "error, not enough parameters."
148          return 1
149      fi
150  }
151
152  # dict wordnet
153  wn() {
154      dict -d wn $@
155  }