X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=ce78062abd3773afda3e876e0cfae11fa2c0786f;hb=cef676814cebd511d5f2fba576f3dd775e8e9950;hp=644070f7f3c7d789d319f7011d4d5ace8e408d5b;hpb=4f9cbb4bae166783f31b702b917ac3761aa34b2a;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 644070f..ce78062 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: Die Mai 29 16:30:03 CEST 2007 [mika] +# Latest change: Sam Jul 07 10:56:20 CEST 2007 [mika] ################################################################################ # This file is sourced only for interactive shells. It # should contain commands to set up aliases, functions, @@ -11,6 +11,79 @@ # # Global Order: zshenv, zprofile, zshrc, zlogin ################################################################################ +# +# zsh-refcard-tag documentation: +# You may notice strange looking comments in the zshrc (and ~/.zshrc as +# well). These are there for a purpose. grml's zsh-refcard can now be +# automatically generated from the contents of the actual configuration +# files. However, we need a little extra information on which comments +# and what lines of code to take into account (and for what purpose). +# +# Here is what they mean: +#{{{ +# List of tags (comment types) used: +# #a# Next line contains an important alias, that should +# be included in the grml-zsh-refcard. +# (placement tag: @@INSERT-aliases@@) +# #f# Next line contains the beginning of an important function. +# (placement tag: @@INSERT-functions@@) +# #v# Next line contains an important variable. +# (placement tag: @@INSERT-variables@@) +# #k# Next line contains an important keybinding. +# (placement tag: @@INSERT-keybindings@@) +# #d# Hashed directories list generation: +# start denotes the start of a list of 'hash -d' +# definitions. +# end denotes its end. +# (placement tag: @@INSERT-hasheddirs@@) +# #A# Abbreviation expansion list generation: +# start denotes the beginning of abbreviations. +# end denotes their end. +# Lines within this section that end in '#d .*' provide +# extra documentation to be included in the refcard. +# (placement tag: @@INSERT-abbrev@@) +# #m# This tag allows you to manually generate refcard entries +# for code lines that are hard/impossible to parse. +# Example: +# #m# k ESC-h Call the run-help function +# That would add a refcard entry in the keybindings table +# for 'ESC-h' with the given comment. +# So the syntax is: #m#
+# #o# This tag lets you insert entries to the 'other' hash. +# Generally, this should not be used. It is there for +# things that cannot be done easily in another way. +# (placement tag: @@INSERT-other-foobar@@) +# +# All of these tags (except for m and o) take two arguments, the first +# within the tag, the other after the tag: +# +# #
# +# +# Where
is really just a number, which are defined by the +# @secmap array on top of 'genrefcard.pl'. The reason for numbers +# instead of names is, that for the reader, the tag should not differ +# much from a regular comment. For zsh, it is a regular comment indeed. +# The numbers have got the following meanings: +# 0 -> "default" +# 1 -> "system" +# 2 -> "user" +# 3 -> "debian" +# 4 -> "search" +# 5 -> "shortcuts" +# 6 -> "services" +# +# So, the following will add an entry to the 'functions' table in the +# 'system' section, with a (hopefully) descriptive comment: +# #f1# Edit an alias via zle +# edalias() { +# +# It will then show up in the @@INSERT-aliases-system@@ replacement tag +# that can be found in 'grml-zsh-refcard.tex.in'. +# If the section number is omitted, the 'default' section is assumed. +# Furthermore, in 'grml-zsh-refcard.tex.in' @@INSERT-aliases@@ is +# exactly the same as @@INSERT-aliases-default@@. If you want a list of +# *all* aliases, for example, use @@INSERT-aliases-all@@. +#}}} # zsh profiling {{{ # just execute 'ZSH_PROFILE_RC=1 zsh' and run 'zprof' to get the details @@ -19,6 +92,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)) @@ -62,17 +149,20 @@ fi # grml specific stuff +#f1# Checks whether or not you're running grml isgrml(){ [ -f /etc/grml_version ] && return 0 return 1 } +#f1# Checks whether or not you're running a grml cd isgrmlcd(){ [ -f /etc/grml_cd ] && return 0 return 1 } if isgrml ; then + #f1# Checks whether or not you're running grml-small isgrmlsmall() { [[ ${${${(f)"$(- + bindkey '\e[A' up-line-or-search # cursor up + bindkey '\e[B' down-line-or-search # - bindkey '^x' history-beginning-search-backward # alternative ways of searching the shell history # bindkey -s '^L' "|less\n" # ctrl-L pipes to less # bindkey -s '^B' " &\n" # ctrl-B runs it in the background @@ -217,6 +309,7 @@ fi # See for example http://unicode.org/charts/ for unicode characters code autoload insert-unicode-char zle -N insert-unicode-char + #k# Insert Unicode character bindkey '^Xi' insert-unicode-char # just type 'cd ...' to get 'cd ../..' @@ -242,24 +335,25 @@ fi setopt extendedglob setopt interactivecomments abk=( - # key # value - 'C' '| wc -l' + # key # value (#d additional doc string) +#A# start '...' '../..' '....' '../../..' 'BG' '& exit' 'C' '| wc -l' 'G' '|& grep --color=auto' 'H' '| head' - 'Hl' ' --help |& less -r' + 'Hl' ' --help |& less -r' #d (Display help in pager) 'L' '| less' 'LL' '|& less -r' 'M' '| most' - 'N' '&>/dev/null' - 'R' '| tr A-z N-za-m' + 'N' '&>/dev/null' #d (No Output) + 'R' '| tr A-z N-za-m' #d (ROT13) 'SL' '| sort | less' 'S' '| sort -u' 'T' '| tail' 'V' '|& vim -' +#A# end 'hide' "echo -en '\033]50;nil2\007'" 'tiny' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-80-*-*-c-*-iso8859-15\007"' 'small' 'echo -en "\033]50;6x10\007"' @@ -337,6 +431,7 @@ fi # fi alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magic' + #m# k ESC-h Call \kbd{run-help} for the 1st word on the command line alias run-help >&/dev/null && unalias run-help autoload run-help # use via 'esc-h' @@ -349,7 +444,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 :(" @@ -365,27 +460,33 @@ fi is4 && autoload -U insert-files && \ zle -N insert-files && \ + #k# Insert files bindkey "^Xf" insert-files # C-x-f bindkey ' ' magic-space # also do history expansion on space + #k# Trigger menu-complete bindkey '\ei' menu-complete # menu completion via esc-i # press esc-e for editing command line in $EDITOR or $VISUAL is4 && autoload -U edit-command-line && \ zle -N edit-command-line && \ + #k# Edit the current line in \kbd{\$EDITOR} bindkey '\ee' edit-command-line -# menu selection: pick item but stay in the menu (press esc-return) +#k# menu selection: pick item but stay in the menu is4 && bindkey -M menuselect '\e^M' accept-and-menu-complete # press "ctrl-e d" to insert the actual date in the form yyyy-mm-dd _bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; } - bindkey '\C-ed' _bkdate + #k# Insert a timestamp on the command line (yyyy-mm-dd) + bindkey '^Ed' _bkdate zle -N _bkdate # press esc-m for inserting last typed word again (thanks to caphuso!) insert-last-typed-word() { zle insert-last-word -- 0 -1 }; \ - zle -N insert-last-typed-word; bindkey "\em" insert-last-typed-word + zle -N insert-last-typed-word; + #k# Insert last typed word + bindkey "\em" insert-last-typed-word # set command prediction from history, see 'man 1 zshcontrib' # is4 && autoload -U predict-on && \ @@ -394,7 +495,7 @@ fi # bindkey "^X^Z" predict-on && \ # bindkey "^Z" predict-off -# put job into foreground via ctrl-z: +#k# Shortcut for \kbd{fg} bindkey -s '^z' "fg\n" # press ctrl-q to quote line: @@ -412,10 +513,31 @@ fi [[ $BUFFER != sudo\ * ]] && LBUFFER="sudo $LBUFFER" } zle -N sudo-command-line _sudo-command-line +#k# Put the current command line into a \kbd{sudo} call 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 +# Please update these tags, if you change the umask settings below. +#o# r_umask 002 +#o# r_umaskstr rwxrwxr-x +#o# umask 022 +#o# umaskstr rwxr-xr-x (( EUID != 0 )) && umask 002 || umask 022 # history: @@ -445,9 +567,10 @@ fi setopt auto_pushd # make cd push the old directory onto the directory stack. setopt nonomatch # try to avoid the 'zsh: no matches found...' setopt nobeep # avoid "beep"ing + setopt pushd_ignore_dups # don't push the same dir twice. MAILCHECK=30 # mailchecks - REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 secondes + REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 seconds watch=(notme root) # watch for everyone but me and root # define word separators (for stuff like backward-word, forward-word, backward-kill-word,..) @@ -463,11 +586,14 @@ fi zle backward-kill-word } zle -N slash-backward-kill-word - bindkey '\ev' slash-backward-kill-word # press esc-v to delete a word until its last '/' (not the same as ctrl-w!) +# press esc-v to delete a word until its last '/' (not the same as ctrl-w!) +#k# Kill everything in a word up to its last \kbd{/} + bindkey '\ev' slash-backward-kill-word # }}} # {{{ history export ZSHDIR=$HOME/.zsh + #v# HISTFILE=$HOME/.zsh_history isgrmlcd && HISTSIZE=500 || HISTSIZE=5000 isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history @@ -476,7 +602,7 @@ fi # dirstack handling {{{ DIRSTACKSIZE=20 if [[ -f ~/.zdirs ]] && [[ ${#dirstack[*]} -eq 0 ]]; then - dirstack=( ${(uf)"$(< ~/.zdirs)"} ) + dirstack=( ${(f)"$(< ~/.zdirs)"} ) # "cd -" won't work after login by just setting $OLDPWD, so [[ -d $dirstack[0] ]] && cd $dirstack[0] && cd $OLDPWD fi @@ -550,7 +676,7 @@ fi # get the name of the program currently running and hostname of local machine # set screen window title if running in a screen if [[ "$TERM" == screen* ]]; then - # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # dont't use hostname + # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # don't use hostname local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname echo -ne "\ek$CMD\e\\" fi @@ -576,12 +702,12 @@ fi WHITE="%{${fg[white]}%}" NO_COLOUR="%{${reset_color}%}" else - BLUE="%{%}" - RED="%{%}" - GREEN="%{%}" - CYAN="%{%}" - WHITE="%{%}" - NO_COLOUR="%{%}" + BLUE=$'%{\e[1;34m%}' + RED=$'%{\e[1;31m%}' + GREEN=$'%{\e[1;32m%}' + CYAN=$'%{\e[1;36m%}' + WHITE=$'%{\e[1;37m%}' + NO_COLOUR=$'%{\e[0m%}' fi EXITCODE="%(?..%?%1v )" @@ -619,6 +745,7 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # }}} # {{{ 'hash' some often used directories + #d# start hash -d deb=/var/cache/apt/archives hash -d doc=/usr/share/doc hash -d linux=/lib/modules/$(command uname -r)/build/ @@ -628,6 +755,7 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " hash -d templ=/usr/share/doc/grml-templates hash -d tt=/usr/share/doc/texttools-doc hash -d www=/var/www + #d# end # }}} # {{{ some aliases @@ -639,11 +767,17 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " [ -r /etc/grml/screenrc_grml ] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml' fi + # do we have GNU ls with color-support? if ls --help 2>/dev/null |grep -- --color= >/dev/null && [ "$TERM" != dumb ] ; then - alias ls='ls -b -CF --color=auto' # do we have GNU ls with color-support? + #a1# execute \kbd{@a@}:\quad ls with colors + alias ls='ls -b -CF --color=auto' + #a1# execute \kbd{@a@}:\quad list all files, with colors alias la='ls -la --color=auto' + #a1# long colored list, without dotfiles (@a@) alias ll='ls -l --color=auto' + #a1# long colored list, human readable sizes (@a@) alias lh='ls -hAl --color=auto' + #a1# List files, append qualifier to filenames \\&\quad(\kbd{/} for directories, \kbd{@} for symlinks ...) alias l='ls -lF --color=auto' else alias ls='ls -b -CF' @@ -656,17 +790,24 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " alias mdstat='cat /proc/mdstat' alias ...='cd ../../' + # generate alias named "$KERNELVERSION-reboot" so you can use boot with kexec: + if [ -x /sbin/kexec -a -r /proc/cmdline ] ; then + alias "$(uname -r)-reboot"="kexec -l --initrd=/boot/initrd.img-"$(uname -r)" --command-line=\"$(cat /proc/cmdline)\" /boot/vmlinuz-"$(uname -r)"" + fi + alias cp='nocorrect cp' # no spelling correction on cp alias mkdir='nocorrect mkdir' # no spelling correction on mkdir alias mv='nocorrect mv' # no spelling correction on mv alias rm='nocorrect rm' # no spelling correction on rm + #a1# Execute \kbd{rmdir} alias rd='rmdir' + #a1# Execute \kbd{rmdir} alias md='mkdir' # see http://www.cl.cam.ac.uk/~mgk25/unicode.html#term for details - alias term2iso="echo 'Setting terminal to iso mode' ; echo -e '%@'" - alias term2utf="echo 'Setting terminal to utf-8 mode'; echo -e '%G'" + alias term2iso="echo 'Setting terminal to iso mode' ; print -n '\e%@'" + alias term2utf="echo 'Setting terminal to utf-8 mode'; print -n '\e%G'" alias utf2iso='if isutfenv ; then for ENV in `env | grep UTF` ; do @@ -695,7 +836,7 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " fi ' - # I like clean prompt, so provide simple way to get that +# I like clean prompt, so provide simple way to get that alias 0 &>/dev/null || functions 0 &>/dev/null || alias 0='return 0' # truecrypt; use e.g. via 'truec /dev/ice /mnt/ice' or 'truec -i' @@ -707,6 +848,7 @@ ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " fi fi +#f1# Hints for the use of zsh on grml zsh-help(){print "$bg[white]$fg[black] zsh-help - hints for use of zsh on grml =======================================$reset_color @@ -758,19 +900,31 @@ Enjoy your grml system with the zsh!$reset_color" # debian stuff if [ -r /etc/debian_version ] ; then + #a3# Execute \kbd{apt-cache search} alias acs='apt-cache search' + #a3# Execute \kbd{apt-cache show} alias acsh='apt-cache show' + #a3# Execute \kbd{apt-cache policy} alias acp='apt-cache policy' + #a3# Execute \kbd{apt-get dist-upgrade} salias adg="apt-get dist-upgrade" + #a3# Execute \kbd{apt-get install} salias agi="apt-get install" + #a3# Execute \kbd{aptitude install} salias ati="aptitude install" + #a3# Execute \kbd{apt-get upgrade} salias ag="apt-get upgrade" + #a3# Execute \kbd{apt-get update} salias au="apt-get update" + #a3# Execute \kbd{aptitude update ; aptitude upgrade} salias -a up="aptitude update ; aptitude upgrade" + #a3# Execute \kbd{dpkg-buildpackage} alias dbp='dpkg-buildpackage' + #a3# Execute \kbd{grep-excuses} alias ge='grep-excuses' # debian upgrade + #f3# Execute \kbd{apt-get update \&\& }\\&\quad \kbd{apt-get dist-upgrade} upgrade () { if [ -z "$1" ] ; then $SUDO apt-get update @@ -788,15 +942,19 @@ Enjoy your grml system with the zsh!$reset_color" fi } - isgrmlcd && alias su="sudo su" # change to user root - alias tlog="tail -f /var/log/syslog" # take a look at the syslog + isgrmlcd && alias su="sudo -s" # get a root shell + #a1# Take a look at the syslog: \kbd{\$PAGER /var/log/syslog} + alias llog="$PAGER /var/log/syslog" # take a look at the syslog + #a1# Take a look at the syslog: \kbd{tail -f /var/log/syslog} + alias tlog="tail -f /var/log/syslog" # follow the syslog + #a1# (Re)-source \kbd{/etc/skel/.zshrc} alias zshskel="source /etc/skel/.zshrc" # source skeleton zshrc fi # sort installed Debian-packages by size if [ -x $(which grep-status) ] ; then - alias debs-by-size='grep-status -FStatus -sInstalled-Size,Package \ - -n "install ok installed" | paste -sd " \n" | sort -rn' + #a3# List installed Debian-packages sorted by size + alias debs-by-size='grep-status -FStatus -sInstalled-Size,Package -n "install ok installed" | paste -sd " \n" | sort -rn' fi # if cdrecord is a symlink (to wodim) or isn't present at all warn: @@ -817,9 +975,9 @@ Please use the wodim binary instead' ; return 1" } fi -# I hate lacking backward compability, so provide an alternative therefore +# I hate lacking backward compatibility, 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.' @@ -918,7 +1076,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} ) @@ -986,7 +1144,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 @@ -997,7 +1155,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 @@ -1012,9 +1170,11 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." alias 855resolution='echo -e "Please use 915resolution as resolution modify tool for Intel graphic chipset."; return -1' fi + #a1# Output version of running grml alias grml-version='cat /etc/grml_version' if [ -x $(which rebuildfstab) ] ; then + #a1# Rebuild /etc/fstab alias grml-rebuildfstab='rebuildfstab -v -r -config' fi @@ -1050,8 +1210,11 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." # }}} # shell functions {{{ + #f1# Provide csh compatibility setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility + #f1# Reload an autoloadable function freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done } + #f1# Reload zsh setup reload () { if [[ "$#*" -eq 0 ]]; then [ -r ~/.zshrc ] && . ~/.zshrc @@ -1065,7 +1228,7 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." } compdef _functions reload freload - # list symlinks in detail (more detailed version of 'readlink -f' and 'whence -s') + #f1# List symlinks in detail (more detailed version of 'readlink -f' and 'whence -s') sll() { [ -z "$1" ] && printf 'Usage: %s \n' "$0" && return 1 for i in "$@" ; do @@ -1079,6 +1242,7 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." # fast manual access if type -p qma &>/dev/null ; then + #f1# View the zsh manual manzsh() { qma zshall "$1" } compdef _man qma else @@ -1088,13 +1252,18 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." fi if [ -x $(which most) ] ; then - # use "dchange " to view Debian's changelog of the package: + #f1# View Debian's changelog of a given package dchange() { if [ -r /usr/share/doc/${1}/changelog.Debian.gz ] ; then most /usr/share/doc/${1}/changelog.Debian.gz else - if [ -r /usr/share/doc/${1}/changelog.gz ] ; then - most /usr/share/doc/${1}/changelog.gz + if type -p aptitude &>/dev/null ; then + echo "No changelog for package $1 found, using aptitude to retrieve it." + if isgrml ; then + aptitude -t unstable changelog ${1} + else + aptitude changelog ${1} + fi else echo "No changelog for package $1 found, sorry." return 1 @@ -1104,7 +1273,23 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." _dchange() { _files -W /usr/share/doc -/ } compdef _dchange dchange - # use "uchange " to view upstream's changelog of the package: + #f1# View Debian's NEWS of a given 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 + + #f1# View upstream's changelog of a given package uchange() { if [ -r /usr/share/doc/${1}/changelog.gz ] ; then most /usr/share/doc/${1}/changelog.gz @@ -1122,28 +1307,31 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." ZSH_PROFILE_RC=1 $SHELL "$@" } -# edit alias via zle: +#f1# Edit an alias via zle edalias() { [ -z "$1" ] && { echo "Usage: edalias " ; return 1 } || vared aliases'[$1]' ; } compdef _aliases edalias -# edit function via zle: +#f1# Edit a function via zle edfunc() { [ -z "$1" ] && { echo "Usage: edfun " ; return 1 } || zed -f "$1" ; } compdef _functions edfunc # use it e.g. via 'Restart apache2' +#m# f6 Start() \kbd{/etc/init.d/\em{process}}\quad\kbd{start} +#m# f6 Restart() \kbd{/etc/init.d/\em{process}}\quad\kbd{restart} +#m# f6 Stop() \kbd{/etc/init.d/\em{process}}\quad\kbd{stop} +#m# f6 Reload() \kbd{/etc/init.d/\em{process}}\quad\kbd{reload} +#m# f6 Force-Reload() \kbd{/etc/init.d/\em{process}}\quad\kbd{force-reload} if [ -d /etc/init.d ] ; then for i in Start Restart Stop Force-Reload Reload ; do eval "$i() { $SUDO /etc/init.d/\$1 ${i:l} \$2 ; }" done - # now the completion for this: - compctl -g "$(echo /etc/init.d/*(:t))" Start Restart Stop Force-Reload Reload fi -# provide useful information on globbing + #f1# Provides useful information on globbing H-Glob() { echo -e " / directories @@ -1200,7 +1388,7 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." fi } - # After resuming from suspend, system is paging heavilly, leading to very bad interactivity. + # After resuming from suspend, system is paging heavily, leading to very bad interactivity. # taken from $LINUX-KERNELSOURCE/Documentation/power/swsusp.txt [ -r /proc/1/maps ] && deswap() { print 'Reading /proc/[0-9]*/maps and sending output to /dev/null, this might take a while.' @@ -1232,6 +1420,71 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." fi } + # just press 'asdf' keys to toggle between dvorak and us keyboard layout + aoeu() { + echo -n 'Switching to us keyboard layout: ' + [ -z "$DISPLAY" ] && $SUDO loadkeys us &>/dev/null || setxkbmap us &>/dev/null + echo 'Done' + } + asdf() { + echo -n 'Switching to dvorak keyboard layout: ' + [ -z "$DISPLAY" ] && $SUDO loadkeys dvorak &>/dev/null || setxkbmap dvorak &>/dev/null + echo 'Done' + } + # just press 'asdf' key to toggle from neon layout to us keyboard layout + uiae() { + echo -n 'Switching to us keyboard layout: ' + 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 "$@" @@ -1267,6 +1520,11 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"." fi # }}} +## genrefcard.pl settings {{{ +### example: split functions-search 8,16,24,32 +#@# split functions-search 8 +## }}} + # add variable to be able to check whether the file has been read {{{ ZSHRC_GLOBAL_HAS_BEEN_READ=1 # }}}