# $Id: .zshrc,v 1.57 2006/12/17 06:33:18 han Exp $ # Below are the color init strings for the basic file types. A color init # string consists of one or more of the following numeric codes: # Attribute codes: # 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed # Text color codes: # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white # Background color codes: # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white # Show the TODO file [ -e ~/*.please ] && < ~/*.please # Pathes path=( /sbin /usr/sbin /bin /usr/bin /usr/X11R6/bin /usr/local/sbin /usr/local/bin ) manpath=( /usr/man /usr/share/man /usr/X11R6/man /usr/local/man /var/qmail/man ) # Don't wanna know I got new mail :P unset mailpath MAILCHECK # mailpath=( "/usr/spool/mail/$LOGNAME?You inexplicably have new mail in /usr/spool/mail/$LOGNAME" # "~/Mail/inbox?You have new mail in ~/Mail/inbox" # "~/Mail/junk?You have junk mail in ~/Mail/junk" ) # Add local directory to the completer path # fpath=($fpath ~/nfs/software) # automatically remove duplicates from these arrays typeset -U path cdpath fpath manpath # Functions saneperms() { find . -type d -print0| xargs -0 chmod 755 find . -type f -print0| xargs -0 chmod ${1:=644} } ur() { if [ "$#" -eq 0 ]; then nice -n 19 unrar x *02.rar || nice -n 19 unrar x *.r01 else nice -n 19 unrar x $@ fi } tempwatch() { while : ; do date "+%H:%M:%S $(sysctl hw.sensors.9|awk '{print $3}')°C" sleep 60 done } mencode() { # mencoder "$@" -vf pp=hb/vb/dr/al -oac copy -ovc xvid -xvidencopts pass=1:bitrate=700:turbo -o /dev/null # mencoder "$@" -vf pp=hb/vb/dr/al -oac copy -ovc xvid -xvidencopts pass=2:bitrate=700 -o ${@%.*}.avi # mencoder "$1" -vf pp=h1/v1/dr/tn/ci -oac copy -ovc xvid -xvidencopts pass=1:bitrate=${2:=700}:turbo -o /dev/null # mencoder "$1" -vf pp=h1/v1/dr/tn/ci -oac copy -ovc xvid -xvidencopts pass=2:bitrate=${2:=700} -o ${1%.*}.avi mencoder "$1" -vf pp=al/c -oac copy -ovc xvid -xvidencopts pass=1:bitrate=${2:=700}:turbo -o /dev/null mencoder "$1" -vf pp=al/c -oac copy -ovc xvid -xvidencopts pass=2:bitrate=${2:=700} -o ${1%.*}.avi } viewlatex() { doc=${1%%.tex} latex $doc.tex && latex $doc.tex && xdvi $doc.pdf rm -f $doc.(dvi|aux|log|toc) } removeallspaces() { find . -maxdepth 1 ! -name .| while read name; do noname=${name##*/} ext=${noname##*.} [[ $noname == ${noname// /} ]] && continue if [[ $ext == $noname ]]; then namecap=${(C)noname} else noname=${noname%.*} namecap=${(C)noname}.$ext fi namewos=${namecap// /} [[ $namewos != $noname ]] && [[ $namecap != $namewos ]] && mv -i $name $namewos done } # Display path in titlebar of terms. chpwd() { [[ -t 1 ]] || return 0 case $TERM in *xterm*|rxvt|(dt|k|E)term) print -Pn "\e]2;%~\a" ;; esac } backup_and_edit() { if [ $# -ne 1 ]; then echo 'What?' return 1 fi [[ -r $1 && -f $1 ]] || { echo "${0##*/}: $1: no access to that file." >&2 return 1 } [ ! -r $1.orig ] && cp $1{,.orig} $EDITOR $1 } doit() { doithome=~/.doit if [ ! -d $doithome ]; then mkdir $doithome fi PWD_REAL=$(readlink -f $PWD) PWD_underscore=${PWD_REAL//\//_} unset doit_subdir for i in $doithome/*_SUBDIR(N); do h=${i#$doithome/} j=${h%_SUBDIR} if [[ ${PWD_underscore#$j} != $PWD_underscore ]]; then PWD_underscore=$h break fi done case $1 in delete) echo 'Removing the doit for this dir' rm -f $doithome/$PWD_underscore ;; edit) $EDITOR $doithome/$PWD_underscore ;; show) cat $doithome/$PWD_underscore ;; add) shift if [[ -z $1 ]]; then echo 'add requires an argument.' return 1 fi echo "$@" >>! $doithome/$PWD_underscore ;; replace) shift if [[ -z $1 ]]; then echo 'add requires an argument.' return 1 fi echo "$@" >! $doithome/$PWD_underscore ;; subdir) if [[ -e $doithome/$PWD_underscore ]]; then cat << EOF $doithome/$PWD_underscore already exists, just use the normal doit commands here. EOF else PWD_underscore=${PWD_underscore}_SUBDIR echo 'What do you want to do in these subdirs? ;)' $EDITOR $doithome/$PWD_underscore echo 'Yes, lets doit again! :D' fi ;; help) cat << EOF doit [edit|subdir|show|add|replace|delete|help] [your_doit_options] doit creates a script which performs all the tasks you alway have to perform in this specific directory or directorytree EOF ;; *) if [[ -e $doithome/$PWD_underscore ]]; then echo 'Yes, lets do it! :)' # zsh error detection and follow up. TRAPZERR() { echo 'Bah! >:(' >&2 return 1 } case $1 in log) rm -f .doit_logfile source $doithome/$PWD_underscore $@ >& .doit_logfile ;; *) source $doithome/$PWD_underscore $@ ;; esac [ $? -eq 0 ] && echo 'Hurray! :D' TRAPZERR() {} else echo 'What do you want to do in this dir? ;)' $EDITOR $doithome/$PWD_underscore echo 'Yes, lets doit again! :D' fi ;; esac } viewmanpage() { nroff -mandoc $1 | w3m } uptodate() { wget --no-remove-listing $1 && cat .listing && rm .listing index.html } gnoort() { # set -x PATH="/bin:/sbin:/usr/bin:/usr/local/bin" SUDO="sudo" FILENAME="$(readlink -f $1)" # Files may contain spaces, but they never contain a `#' # Sometimes \# but that's another story. # load the stat module for portability zmodload -a -i zsh/stat stat if [[ $UID -eq 0 ]]; then echo "gnoort: Don't run this script as root dummy :D" >&2 return 1 fi if [[ -z $EDITOR ]]; then echo "gnoort: env var \$EDITOR not set." fi if [[ -z $FILENAME ]]; then echo "gnoort: You want to bore me to death or what? :D" >&2 return 1 fi if [[ ! -f $FILENAME ]]; then echo "gnoort: $FILENAME does not exist." >&2 return 1 fi DIRNAME=${FILENAME:h} if [[ ! -d $DIRNAME ]]; then echo "gnoort: directory $DIRNAME does not exist." >&2 return 1 fi if [[ $(stat +uid $DIRNAME) -ne 0 ]]; then echo "gnoort: directory $DIRNAME isn't owned by root." >&2 return 1 fi if [[ $(stat +uid $FILENAME) -ne 0 ]]; then echo "gnoort: file $FILENAME isn't owned by root." >&2 return 1 fi TRAPEXIT() { $SUDO chown root "$FILENAME" echo gnoort: Original permissions on $FILENAME \ restored. You can no longer edit it. return 1 } if ! $SUDO chown $UID "$FILENAME"; then echo "gnoort: Can't chown $FILENAME back to your \$UID." >&2 return 1 fi $EDITOR "$FILENAME" $SUDO chown root "$FILENAME" TRAPEXIT(){} # set +x # unload this annoying module zmodload -u -i zsh/stat stat return 0 } # insert-quote-magic # If you now paste a url it will be magically quoted! # But it only works on 4.2.0 and later. if [ ${ZSH_VERSION//\./} -ge 420 ]; then autoload -U url-quote-magic zle -N self-insert url-quote-magic fi # Settings. # set w3m as the pager and manpager if it exists if which w3m &> /dev/null; then export PAGER=w3m # set to xterm to enable mousesupport in screen alias w3m='TERM=xterm LC_ALL= w3m' alias less='TERM=xterm LC_ALL= w3m' alias man='TERM=xterm LC_ALL= w3mman' fi umask 022 # This is default; change for other hosts. editors=(Emacs editorwrapper emacs qe mg jed zile) # OS specific settings local PromptColor=$(echo '%{\e[3'$(($RANDOM%7))'m%}%{\e[01m%}') case $OSTYPE in openbsd*) case $HOST in haddock*) editors=(emacsclient emacs mg) local PromptColor=$(echo '%{\e[36m%}') alias mutt='mutt -y' #alias mc='mccolor' export CVSROOT='/var/www/cvsroot' export QMAILHOST='mijncomputer.nl' alias spamstat="grep '===.*spam' ~/.Maildroplog|sort|uniq -c" alias burnaudiocd='sudo cdrecord dev=/dev/rcd1c:1,0,0 speed=24 -dao -pad -v *.wav' eject() { if [ $# -eq 0 ]; then /bin/eject /dev/cd1c else /bin/eject $* fi } c4osync() { ( TRAPINT() { print "Caught SIGINT, aborting." return 1 } cd /usr/cruxports find . -name core|xargs rm zgrep '^[^l]....w....' **/.footprint.gz | egrep -v '(qmail)' && return 1 zgrep '^[^l].......w.' **/.footprint.gz | egrep -v '(qmail)' && return 1 tar czf cruxports_for_openbsd.tar.gz /usr/cruxports/core chmod -R o+r * if grep '# Maintainer: ' */*/Pkgfile|grep -v Boetes; then echo 'fix that shit :-)' >&2 return 1 fi tar czf cruxports_for_openbsd.tar.gz $(find /usr/cruxports/core /usr/cruxports/INSTALL -type f ! -name '*.html') makeindexhtml httpup-repgen rsync -p -P -L --recursive --times \ --delete \ INSTALL PORTING REPO core cruxports_for_openbsd.tar.gz index.html maywork opt \ xs4all:WWW/software/c4o TRAPINT() {} ) } ;; diodontis*) local PromptColor=$(echo '%{\e[01;35m%}') ;; phylon*) local PromptColor=$(echo '%{\e[01;34m%}') ;; *) local PromptColor="$HOST " ;; esac # hard to remember. ldd_forlibs() { readelf -ds $1|fgrep NEEDED } alias nl='export CVSROOT=anoncvs@anoncvs.nl.openbsd.org:/cvs' if which gls &> /dev/null; then alias ls='gls --color=yes' elif which colorls &> /dev/null; then alias ls='colorls -FG' fi alias lsof='echo use fstat' alias sh='sh -l' alias ksh='ksh -l' export PKG_PATH='ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/packages/i386/' ;; linux*) case $HOST in marsupilami*) cruxsync() { ( TRAPINT() { print "Caught SIGINT, aborting." return 1 } cd /usr/ports/mine chmod -R o+r * if grep '# Maintainer: ' */Pkgfile|grep -v Boetes; then echo 'fix that shit :-)' >&2 return 1 fi rm **/*~ grep '^[^l]....w....' */.footprint | egrep -v '(pathological|gtkballs|qmail)' && return 1 grep '^[^l].......w.' */.footprint | egrep -v '(qmail)' && return 1 ~/nfs/software/makeindexhtml portspage \ --title= \ --header=/mnt/nfs/etc/portsindex.html.header \ --footer=/mnt/nfs/etc/portsindex.html.footer \ /usr/ports/mine |\ sed -e 's|/usr/ports/mine|han|' \ >! index.html httpup-repgen rsync -p -P -L --recursive --times --delete . \ xs4all:WWW/software/crux/han TRAPINT() {} ) } ut_casa() { xsetkeylock num off alsactl -f ~/.tmp/sound_settings store alsactl -f ~/.q3a/sound_settings restore botnames=( Penguin Scarab Puma Boa Widow Chicken Cockroach Cobra Cougar Goose Scorpion Raven Python Tiger Mantis Cheetah ) opties=(+set fs_game q3ut3 +map ut_casa +set g_gametype 4) no_bots=$#botnames for (( i = 1; i <= 5; i++)); do random=$((($(random_number) % $no_bots) + 1)) bots=($bots +addbot $botnames[$random] 4 blue) botnames[$random]=() no_bots=$(($no_bots - 1)) done cd /usr/local/games/quake3 ./quake3 $opties $bots alsactl -f ~/.tmp/sound_settings restore } q4() { pkill unclutter quake4 +disconnect unclutter -idle 2 -jitter 10 -root &! } easy() { find . -type f -exec chmod 644 {} \; easytag . id3v2 -s *.mp3 && normalize *.mp3 vorbisgain -af *.ogg metaflac --add-replay-gain *.flac replaygain --auto *.mpc find . -type f -exec chmod 444 {} \; } local PromptColor=$(echo '%{\e[34m%}') alias quake3='quake3 -h' alias doom3='doom3' alias ut='quake3 +set fs_game q3ut3 +connect ' alias mc='mccolor' alias grep='grep --color=auto' alias mvt='mv ~/.tmp/*.torrent /mnt/cd/tmp' alias ksh='mksh -l' alias klassiek='mplayer http://150.135.250.53:9000' export GNU_SECURE=~/.emacs.d/authorized_hosts # nvidia settings export __GL_FSAA_MODE=3 #or 4 export __GL_DEFAULT_LOG_ANISO=1 # export __GL_SYNC_TO_VBLANK=0 # export MENUCONFIG_COLOR=alt # Lilipond # export TEXMF='{/usr/share/lilypond/2.4.1,/usr/share/texmf}' ;; lisa*) local PromptColor=$(echo '%{\e[37m%}') ;; *) local PromptColor="$HOST " ;; esac alias ls='ls -pb --color=auto --time-style=local' ;; freebsd*) case $HOST in *xs4all*) editors=(emacs zile) local PromptColor=$(echo '%{\e[33m%}') ;; esac export PACKAGESITE='ftp://ftp.nluug.nl/pub/FreeBSD/ports/i386/packages-4.6-stable/All/' if which gls &> /dev/null; then alias ls='gls --color=yes' elif which gnuls &> /dev/null; then alias ls='gnuls --color=yes' else alias ls='ls -FG' fi ;; *) local PromptColor="$HOST " ;; esac # Editors for root. if [ $UID -eq 0 ]; then editors=(mg qe jed zile jmacs emacs) fi # Set the editor. for editor in $editors; do if which $editor >& /dev/null; then export EDITOR==$editor export VISUAL=$EDITOR alias e=$EDITOR break fi done [[ -z $EDITOR ]] && echo 'No suitable editor found. Use tramp. :-}' alias vipw='EDITOR=sudoedit sudo vipw' # load colors autoload -U colors colors # Set the prompt. prompt="$PromptColor%~%(!|%{$fg[yellow]%}|%{$fg_bold[black]%})%(?..%{$fg[red]%})%#%{$fg_no_bold[default]%} " # Special setting for inside emacs. [[ $INSIDE_EMACS = t ]] && unsetopt zle # Environment Variables. # Nice colors, this var is also used by gnu-ls so for consitency I prefer gnu-ls. export LS_COLORS='no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;00:cd=40;33;00:or=40;31;00:ex=00;32:*.tar=00;31:*.tgz=00;31:*.rar=00;31:*.ace=00;31:*.zip=00;31:*.bz2=00;31:*.rpm=00;31:*.gz=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.png=00;35:*.tga=00;35:*.xpm=00;35:*.mpg=00;37:*.avi=00;37:*.mov=00;37:*.mp3=01;35:*.flac=01;35:*.ogg=01;35:*.mpc=01;35:*.wav=01;35:*.ape=01;35:*.core=00;33' zstyle ':completion:*' list-colors $LS_COLORS # History export HISTSIZE=5000 export HISTFILE=~/.history_zsh export SAVEHIST=4000 export TMP=~/.tmp export TMPDIR=$TMP export NULLCMD=: export PERL_BADLANG=0 export LC_ALL=en_GB # This is for antialiasing for qt- and gtk-apps export QT_XFT=1 export GDK_USE_XFT=1 # We always want to use ssh for rsync. export RSYNC_RSH=ssh # And for ssh as well. export CVS_RSH=ssh unset WORDCHARS # Aliases alias rsync='rsync -prtvLP' alias r="source ~/.zshrc" # my shells often last longer than the settings. # alias rm='rm -i' alias mv='mv -i' alias cp='cp -i' alias p='cd -' alias l='ls -lhA' alias df='df -h' alias cvsup='cvs -q up -PAd' alias c='cd ~; clear' alias par='parchive r *.((p|P)??|(par|PAR)2)' alias rs=rsync alias unrar='nice -n 19 unrar' whence htop > /dev/null && alias top=htop # Global aliases -- These do not have to be at the beginning of # the command line. alias -g L='|less' alias -g G='|grep' alias -g X='|xargs' alias -g H='|head' alias -g T='|tail' alias -g U='|tai64nlocal' # Limits. # ulimit unlimited # limit stack 8192 limit core unlimited # limit -s # Set/unset shell options. setopt \ brace_ccl inc_append_history hist_ignore_space \ hist_no_store hist_no_functions hist_ignore_all_dups \ hist_expire_dups_first no_hup \ no_check_jobs autocd autolist autopushd autoresume \ cdablevars extendedglob globdots longlistjobs \ noclobber notify pushdminus pushdsilent \ pushdtohome rcquotes recexact sunkeyboardhack \ complete_in_word # setopt autocd correct correctall unsetopt bgnice autoparamslash cdablevars # Autoload zsh modules when they are referenced. # zmodload -a zsh/zpty zpty # zmodload -a zsh/zprof zprof # zmodload -ap zsh/mapfile mapfile # Completion Styles # Setup new style completion system. To see examples of the old # style -- compctl based -- programmable completion, check # Misc/compctl-examples in the zsh distribution. autoload -U compinit compinit # list of completers to use zstyle ':completion:*::::' completer _expand _complete _ignored #_approximate # Insert all expansions for expand completer zstyle ':completion:*:expand:*' tag-order all-expansions # Formatting and messages. zstyle ':completion:*' verbose no #yes zstyle ':completion:*:descriptions' format '%B%d%b' zstyle ':completion:*:messages' format '%d' zstyle ':completion:*:warnings' format 'No matches for: %d' zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b' # Offer indexes before parameters in subscripts zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters # Command for process lists, the local web server details and host # completion. zstyle ':completion:*:processes' command 'ps x -o pid,nice,pcpu,tt,args' # Hosts to use for completion, see later zstyle. zstyle '*' hosts $(awk '/^[^#]/ {print $3" "$4" "$5}' /etc/hosts) # Filename suffixes to ignore during completion, except after rm # command. zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns \ '*?.o' '*~' # '*?.orig' # Ignore completion functions, until the _ignored completer. zstyle ':completion:*:functions' ignored-patterns '_*' # Disable unused completers. compdef _default \ apachectl apm apt apt-show-versions archie arp arping cvsup \ debchange debfoster debpackages dict dictwords domains dpkg \ dpkgsourceelm fetchmail figlet finger groups iconv imagemagick \ ispell java lp mailboxes mail make-kpkg mplayer mysqldiff \ mysqlutils ncftp nedit netscape newsgroups pine printers \ print rlogin slrn spamassassin texi \ texinfo tiff tin userathost users userson w3m yp urpmi rpm # Since w3mman is aliased to man... compdef _man w3mman # Keysbinds # Use ^v to find out the keynames bindkey '^[[2~' overwrite-mode bindkey '^[[3~' delete-char bindkey '^[[5~' up-line-or-history bindkey '^[[6~' down-line-or-history bindkey '^[[7~' beginning-of-line bindkey '^[[8~' end-of-line bindkey '^[,' insert-last-word # I always hit m-, instead if m-. for some reason bindkey -e # emacs key bindings bindkey ' ' magic-space # also do history expansion on space bindkey '^I' complete-word # complete on tab, leave expansion to _expand # Unbind c-s and c-q stty -ixon