X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=60a67b3bacbd53d136b319b195fb701845541e86;hb=e9eb7498c7ce5f3271d53f0fe2c6a949e2f86eff;hp=91b39d721604fdb4f3ea99047a0901c06f0e7276;hpb=5478ef70c0c343b4b120830c4c7e07e345bd85e3;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 91b39d7..60a67b3 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -3,7 +3,7 @@ # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Mon Jun 04 23:21:01 CEST 2007 [mika] +# Latest change: Mit Jun 20 10:28:28 CEST 2007 [mika] ################################################################################ # This file is sourced only for interactive shells. It # should contain commands to set up aliases, functions, @@ -19,6 +19,20 @@ fi # }}} +# locale setup {{{ + if [ -n "$LANG" ] ; then + export LANG + else + [ -r /etc/default/locale ] && source /etc/default/locale + fi + [ -n "$LANG" ] && export LANG || export LANG="en_US.iso885915" + [ -n "$LC_ALL" ] && export LC_ALL + [ -n "$LC_MESSAGES" ] && export LC_MESSAGES + + [ -r /etc/sysconfig/keyboard ] && source /etc/sysconfig/keyboard + [ -r /etc/timezone ] && TZ=$(cat /etc/timezone) +# }}} + # check for potentially old files in 'completion.d' {{{ setopt extendedglob xof=(/etc/zsh/completion.d/*~/etc/zsh/completion.d/_*(N)) @@ -92,7 +106,7 @@ # check for user, if not running as root set $SUDO to sudo (( EUID != 0 )) && SUDO='sudo' || SUDO='' - function salias() { + salias() { # creates an alias and precedes the command with # sudo if $EUID is not zero. local only=0 ; local multi=0 @@ -349,7 +363,7 @@ fi function compdef { } fi - is4 && autoload -U zed # use ZLE editor to edit a file or function + is4 && autoload -U zed # use ZLE editor to edit a file or function is4 && for mod in complist deltochar mathfunc ; do zmodload -i zsh/${mod} 2>/dev/null || print "Notice: no ${mod} available :(" @@ -413,6 +427,21 @@ fi } zle -N sudo-command-line _sudo-command-line bindkey "^Os" sudo-command-line + +### jump behind the first word on the cmdline. +### useful to add options. + function jump_after_first_word() { + local words + words=(${(z)BUFFER}) + if (( ${#words} <= 1 )) ; then + CURSOR=${#BUFFER} + else + CURSOR=${#${words[1]}} + fi + } + zle -N jump_after_first_word + bindkey '^x1' jump_after_first_word + # }}} # {{{ set some important options @@ -820,7 +849,7 @@ Please use the wodim binary instead' ; return 1" # I hate lacking backward compability, so provide an alternative therefore if ! [ -x $(which apache2-ssl-certificate) ] ; then - function apache2-ssl-certificate(){ + apache2-ssl-certificate(){ print 'Debian does not ship apache2-ssl-certificate anymore (see #398520). :(' print 'You might want to take a look at Debian the package ssl-cert as well.' @@ -919,7 +948,7 @@ grmlcomp() { # zstyle ':completion:*' expand prefix suffix # automatic rehash? Credits go to Frank Terbeck -# function my_accept () { +# my_accept() { # local buf # [[ -z ${BUFFER} ]] && zle accept-line && return # buf=( ${(z)BUFFER} ) @@ -987,7 +1016,7 @@ grmlcomp() { # {{{ grmlstuff grmlstuff() { # people should use 'grml-x'! - function startx() { + startx() { if [ -e /etc/X11/xorg.conf ] ; then [ -x /usr/bin/startx ] && /usr/bin/startx || /usr/X11R6/bin/startx else @@ -998,7 +1027,7 @@ If you want to use startx anyway please call \"/usr/bin/startx\"." fi } - function xinit() { + xinit() { if [ -e /etc/X11/xorg.conf ] ; then [ -x /usr/bin/xinit ] && /usr/bin/xinit || /usr/X11R6/bin/xinit else @@ -1105,6 +1134,22 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." _dchange() { _files -W /usr/share/doc -/ } compdef _dchange dchange + # use "dnews " to view Debian's NEWS file of the package: + dnews() { + if [ -r /usr/share/doc/${1}/NEWS.Debian.gz ] ; then + most /usr/share/doc/${1}/NEWS.Debian.gz + else + if [ -r /usr/share/doc/${1}/NEWS.gz ] ; then + most /usr/share/doc/${1}/NEWS.gz + else + echo "No NEWS file for package $1 found, sorry." + return 1 + fi + fi + } + _dnews() { _files -W /usr/share/doc -/ } + compdef _dnews dnews + # use "uchange " to view upstream's changelog of the package: uchange() { if [ -r /usr/share/doc/${1}/changelog.gz ] ; then @@ -1255,6 +1300,54 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." setxkbmap us && echo 'Done' || echo 'Failed' } + # set up an ipv6 tunnel + ipv6-tunnel() { + 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 + } + # Switching shell safely and efficiently? http://www.zsh.org/mla/workers/2001/msg02410.html # bash() { # NO_SWITCH="yes" command bash "$@"