1 ### OPTIONS
2 setopt completeinword
3 setopt no_always_last_prompt
4 setopt rm_star_silent
5 setopt automenu
6 setopt extended_glob
7 setopt autopushd
8 setopt nobgnice
9 setopt hist_ignore_all_dups
10 setopt sharehistory
11 unsetopt promptcr
12 ### path history
13 DIRSTACKSIZE=15
14 setopt autopushd pushdminus pushdsilent pushdtohome
15 setopt autolist
16 setopt extendedglob
17
18
19 ### ALIASES
20 alias dh="dirs -v"
21 # I used to use xv to often...
22 alias xv="gqview -l"
23 alias run-help=man
24 alias lterm="export TERM=linux"
25 alias ll="ls -al --color"
26 alias ls="ls --color"
27 alias l="ls -a --color"
28 #alias ll="/bin/ls -al"
29 #alias ls="/bin/ls"
30 #alias l="/bin/ls -a"
31 # export LYNX_CFG=~/.lynxrc
32 alias lynx="noglob command lynx -cfg=~/.lynxrc"
33
34 ### ENVIRONMENT VARIABLES
35 LC_COLLATE=C ; export LC_COLLATE
36 MAILCHECK=86400
37 # export LANG=de_DE@euro
38 export LANG=de_DE
39 export LC_MESSAGES=en_US
40
41 export ORACLE_HOME=/home/oracle/OraHome1
42 # export ORACLE_SID=whatever
43
44 COLORX="^[[0;31;47m"
45 COLOR0="^[[0m"
46 COLOR1="^[[0;30;41m"
47 COLOR2="^[[0;30;42m"
48 COLOR3="^[[0;30;43m"
49 COLOR4="^[[0;30;44m"
50 COLOR5="^[[0;30;45m"
51 COLOR6="^[[0;30;46m"
52 COLOR7="^[[0;30;47m"
53 COLOR8="^[[0;34;41m"
54 COLOR9="^[[0;34;43m"
55 COLOR10="^[[0;37;44m"
56 COLOROFF="^[[0m"
57
58 red='%{^[[0;31m%}'
59 white_on_blue='%{^[[0;37;44m%}'
60 green='%{^[[0;32m%}'
61 yellow='%{^[[0;33m%}'
62 blue='%{^[[0;34m%}'
63 magenta='%{^[[0;35m%}'
64 cyan='%{^[[0;36m%}'
65 nocolor='%{^[[0m%}'
66
67 ZDOTDIR="$HOME/.zsh"
68
69 if [ "$TERM" = "xterm-debian" ] ; then
70 chpwd () {
71 echo -n "^[]2;$LOGNAME@$(hostname): $(pwd)^G"
72 }
73 fi
74
75 PROMPT2='%_> '
76 RPROMPT='%{^[[0;33m%}%1v%{^[[0m%}'
77
78 export HISTFILE=~/.zshhistory
79 export HISTSIZE=500
80 export SAVEHIST=500
81 export NNTPSERVER=picard.franken.de
82 ###
83 export PATH="/usr/lib/compilercache:$JAVA_HOME/bin:/home/tkoehler/bin:/usr/local/bin/X11:/usr/local/bin:/bin:/usr/X11R6/bin:/usr/bin:/usr/sbin:/usr/bin/X11:/local/bin:/usr/games:/usr/lib/mutt:${ORACLE_HOME}/bin:/usr/lib/ICAClient:/usr/local/sap/SAPGUI/6.30/bin"
84
85 VIM=/usr/local/share/vim
86 echo ~VIM >/dev/null
87
88 # alias JAVA_HOME="export JAVA_HOME=/usr/lib/jdk1.1/"
89 export JAVA_HOME=/usr/local/java/j2sdk1.4.2_01
90
91 ## SAP
92 #### PLATINHOME="/usr/local/sap/SAPGUI/6.30/"
93 PLATIN_JAVA="/usr/local/java/j2sdk1.4.2_01/bin/java"
94 PLATIN_JAVA_VER=1.4.2
95 ### export PLATINHOME PLATIN_JAVA PLATIN_JAVA_VER
96 export PLATIN_JAVA PLATIN_JAVA_VER
97 export EDITOR=/usr/local/bin/vim
98 export SLANG_EDITOR="/usr/local/bin/vim %s"
99
100 export MOZILLA_HOME="/usr/local/netscape"
101
102 export QTDIR PATH MANPATH LD_LIBRARY_PATH LIBRARY_PATH
103 export CPLUS_INCLUDE_PATH
104
105 export IRCNAME="http://jeanluc-picard.de/irc.html"
106 export PAGER=less
107
108 export LD_LIBRARY_PATH=/home/tkoehler/lib:/home/oracle/OraHome1/lib/
109
110 # export LESS
111
112
113 export ZLS_COLOURS
114 ZLS_COLOURS="no=36;40:fi=36;40:di=32;40:ln=33;40:pi=31;40:so=22;40:bd=44;37:cd=44;37:ex=35;40:mi=36;40:lc=\e[:rc=m:mi=37;41"
115 LS_COLORS=$ZLS_COLOURS
116 export LS_COLORS
117 #### muß mal noch rausfinden, warum die hier in ganz neuen zsh-Versionen nicht
118 #### mehr so tun...
119 export ZLS_COLOURS
120 # no 0 for normal text (i.e. when displaying something
121 # other than a matched file)
122 # fi 0 for regular files
123 # di 32 for directories
124 # ln 36 for symbolic links
125 # pi 31 for named pipes (FIFOs)
126 # so 33 for sockets
127 # bd 44;37
128 # for block devices
129 # cd 44;37
130 # for character devices
131 # ex 35 for executable files
132 # mi none
133 # for non-existent file (default is the value defined
134 # for fi)
135 # lc \e[ for the left code (see below)
136 # rc m for the right code
137 # ec none
138 # for the end code
139 MANPATH=/usr/man:/usr/share/man:/usr/X11R6/man:/usr/local/man
140
141 ### cool
142 export REPORTTIME=3
143
144 ### FUNCTIONS
145 x() { a=$1 ; shift ; echo "$@" | xargs $a }
146 prepare_ssh() {
147 if [ -f $HOME/.ssh/agent_var ] ; then
148 . $HOME/.ssh/agent_var
149 else
150 SSH_AGENT_PID=1
151 fi
152 if kill -0 $SSH_AGENT_PID ; then
153 :
154 else
155 eval `ssh-agent`
156 ssh-add $HOME/.ssh/id_rsa
157 touch $HOME/.ssh/agent_var ; chmod 600 $HOME/.ssh/agent_var
158 echo "export SSH_AGENT_PID=$SSH_AGENT_PID" > $HOME/.ssh/agent_var
159 echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> $HOME/.ssh/agent_var
160 fi
161 }
162
163 if [ -z "$SSH_AGENT_PID" ] ; then
164 prepare_ssh
165 fi
166
167 archive_this_dir() {
168 if [ -z "$1" ] ; then
169 echo "Usage: archive_this_dir LABEL"
170 return 1
171 fi
172 ARCHIVE_TO_CD $1 $PWD 0xEA8CFEDE
173 }
174
175 archive_this_dir_as_pics() {
176 if [ -z "$1" ] ; then
177 echo "Usage: archive_this_dir_as_pics LABEL"
178 return 1
179 fi
180 ARCHIVE_PICTURES_TO_CD $1 $PWD 0xEA8CFEDE
181 }
182
183 gpg_recv_key() {
184 gpg --keyserver wwwkeys.pgp.net --keyserver-options honor-http-proxy --recv-keys $@
185 }
186
187 ### highlight current line's {} pairs
188 ### yes, this functions doesn't work correct in all situations,
189 ### but it's a nice thing
190 highlight() {
191 line=$*
192 i=0
193 j=0
194 strlen=$#line
195 while [ $i -le $strlen ] ; do
196 i=$[i+1]
197 x=$line[$i]
198 case $x in
199 (\{) j=$[j+1] ; eval print -n $"COLOR$j"$"x"$"COLOROFF" ;;
200 (\}) eval print -n $"COLOR$j"$"x"$"COLOROFF" ; j=$[j-1] ;;
201 (*) print -n $x ;;
202 esac
203 done
204 print $COLOROFF
205 }
206
207 NEW() {
208 vim -c "se tw=70" `date +%Y%m%d-%R`.txt
209 }
210
211 ### set xterm's icon text, its titletext, or both at once
212 seticontext() {
213 print "\033]1;$@\007"
214 }
215 settitletext() {
216 print "\033]2;$@\007"
217 }
218 settitle() {
219 print "\033]0;$@\007"
220 }
221
222 ### a function for setting up proxy settings
223 set_proxy() {
224 export http_proxy="http://proxy:3128"
225 export https_proxy="http://proxy:3128"
226 export ftp_proxy="http://proxy:3128"
227 }
228
229 namedir () { eval "$1=$PWD" ; eval "echo ~$1" }
230
231 ### run help on a vim help topic
232 vimhelp () { vim -c "help $1" -c on -c "au! VimEnter *" }
233 gvimhelp () { gvim -c "help $1" -c on -c "au! VimEnter *" }
234
235 acroread() {
236 LANG=C command acroread $@
237 }
238 galeon() {
239 LANG=de_DE command galeon $@
240 }
241 aumix() {
242 LANG=en command aumix $@
243 }
244 function startx() {
245 command startx "$@" >& ~/.startx.out
246 }
247
248
249 function precmd {
250 # echo -n "^[]2;$LOGNAME@$(hostname): $(pwd)\a"
251 # if [ "$TERM" = "screen-w" ] ; then
252 # perl ~/bin/screen_hardstatus.pl $MYTTY $USER $HOST &!
253 # PROMPT=$(perl ~/bin/screen_hardstatus.pl " " $USER $HOST $ZSH_VERSION)
254 apm=$(apm|sed -e 's/%/%%/')
255 PROMPT="${green}$(uptime) $nocolor
256 ${white_on_blue}--INSERT--${cyan} zsh version: $ZSH_VERSION $yellow Return Code: %? $nocolor
257 $blue%h $red%n@%m ${yellow}TTY:%l$cyan - $apm
258 $cyan%~>$nocolor "
259 # PROMPT="$PROMPT$WHO\n"
260 # fi
261
262 case "$jobstates" in
263 (*running*suspended*)
264 psvar[1]="There are running and stopped jobs.";;
265 (*suspended*running*)
266 psvar[1]="There are running and stopped jobs.";;
267 (*suspended*)
268 psvar[1]="There are stopped jobs.";;
269 (*running*)
270 psvar[1]="There are running jobs.";;
271 (*)
272 psvar[1]="";;
273 esac
274 }
275
276 # pipe jobs to less
277 jless() {
278 typeset -x -A tmpstates
279 for i in $jobstates[(I)*]
280 do
281 tmpstates[$i]=$jobstates[$i]
282 done
283 for i in $tmpstates[(I)*]
284 do
285 echo "[$i]\t$tmpstates[$i]"
286 done | sort -n | less
287 unset tmpstates
288 }
289
290 function dmalloc { eval `command dmalloc -b $*` }
291
292 ### KEY BINDINGS
293 # vi keybindings
294 bindkey -v
295
296 bindkey "^[[A" history-beginning-search-backward
297 bindkey "^[[B" history-beginning-search-forward
298 bindkey "^[[C" forward-char
299 bindkey "^[[D" backward-char
300 bindkey "^Xq" push-line
301 bindkey "^Xr" history-incremental-search-backward
302 bindkey "^Xs" history-incremental-search-forward
303 bindkey "^X_" insert-last-word
304 bindkey "^Xa" accept-and-hold
305 bindkey "^X^H" run-help
306 bindkey "^Xh" _complete_help
307 bindkey "^I" expand-or-complete
308 bindkey "^E" expand-word
309 bindkey "^N" menu-complete
310 bindkey "^P" reverse-menu-complete
311 bindkey -M vicmd "^R" redo
312 bindkey -M vicmd "u" undo
313 bindkey -M vicmd "ga" what-cursor-position
314
315
316 ### VI MODE EXTENSIONS
317 redisplay() {
318 builtin zle .redisplay
319 # L=$[LINES - 1]
320 # echo -n "\033[$L;0;H"
321 ( true ; show_mode "INSERT") &!
322 }
323 redisplay2() {
324 builtin zle .redisplay
325 # L=$[LINES - 1]
326 # echo -n "\033[$L;0;H"
327 (true ; show_mode "NORMAL") &!
328 }
329 zle -N redisplay
330 zle -N redisplay2
331 bindkey -M viins "^X^R" redisplay
332 bindkey -M vicmd "^X^R" redisplay2
333
334 screenclear () {
335 echo -n "\033[2J\033[400H"
336 #repeat $[LINES - 2] echo
337 builtin zle .redisplay
338 # builtin zle .clear-screen
339 (true ; show_mode "INSERT") &!
340 }
341 zle -N screenclear
342 bindkey "
" screenclear
343
344 screenclearx () {
345 # print -n '^[7'
346 repeat 2 print
347 local MYLINE="$LBUFFER$RBUFFER"
348 highlight $MYLINE
349 repeat 4 print
350 builtin zle redisplay
351 # print -n '^[8'
352 # print "${COLORX}Hit Enter to continue${COLOROFF}"
353 # read -k
354 }
355 zle -N screenclearx
356 bindkey "^Xl" screenclearx
357 #bindkey "^L" screenclearx
358
359
360
361 show_mode() {
362 local COL
363 local x
364 COL=$[COLUMNS-3]
365 COL=$[COL-$#1]
366 #x=$(wc -l $PREBUFFER)
367 x=$(echo $PREBUFFER | wc -l )
368 x=$[x+1]
369 # echo -n "^[7^[[0;$COL;H"
370 echo -n "^[7^[[$x;A^[[0;G"
371 echo -n ""
372 # c='`'
373 # echo -n "^[7^[[5A^[[0$c"
374 echo -n "^[[0;37;44m--$1--^[[0m"
375 echo -n "^[8"
376 }
377
378 ### vi-add-eol (unbound) (A) (unbound)
379 ### Move to the end of the line and enter insert mode.
380
381 vi-add-eol() {
382 show_mode "INSERT"
383 builtin zle .vi-add-eol
384 }
385 zle -N vi-add-eol
386 bindkey -M vicmd "A" vi-add-eol
387
388 ### vi-add-next (unbound) (a) (unbound)
389 ### Enter insert mode after the current cursor posi
390 ### tion, without changing lines.
391
392 vi-add-next() {
393 show_mode "INSERT"
394 builtin zle .vi-add-next
395 # OLDLBUFFER=$LBUFFER
396 # OLDRBUFFER=$RBUFFER
397 # NNUMERIC=$NUMERIC
398 # bindkey -M viins "^[" vi-cmd-mode-a
399 }
400 zle -N vi-add-next
401 bindkey -M vicmd "a" vi-add-next
402
403 #vi-cmd-mode-a() {
404 # show_mode "NORMAL"
405 # STRING="LLBUFFER=\${LBUFFER:s/$OLDLBUFFER//}"
406 # eval $STRING
407 # STRING="RRBUFFER=\${RBUFFER:s/$OLDRBUFFER/}"
408 # eval $STRING
409 # INS="$LLBUFFER$RRBUFFER"
410 # LBUFFER=$OLDLBUFFER
411 # repeat $NNUMERIC LBUFFER="$LBUFFER$INS"
412 # builtin zle .vi-cmd-mode
413 # unset LLBUFFER RRBUFFER NNUMERIC INS
414 # bindkey -M viins "^[" vi-cmd-mode
415 #}
416 #zle -N vi-cmd-mode-a
417
418 ### vi-change (unbound) (c) (unbound)
419 ### Read a movement command from the keyboard, and kill
420 ### from the cursor position to the endpoint of the
421 ### movement. Then enter insert mode. If the command
422 ### is vi-change, change the current line.
423
424 vi-change() {
425 show_mode "INSERT"
426 builtin zle .vi-change
427 }
428 zle -N vi-change
429 bindkey -M vicmd "c" vi-change
430
431 ### vi-change-eol (unbound) (C) (unbound)
432 ### Kill to the end of the line and enter insert mode.
433
434 vi-change-eol() {
435 show_mode "INSERT"
436 builtin zle .vi-change-eol
437 }
438 zle -N vi-change-eol
439 bindkey -M vicmd "C" vi-change-eol
440
441 ### vi-change-whole-line (unbound) (S) (unbound)
442 ### Kill the current line and enter insert mode.
443
444 vi-change-whole-line() {
445 show_mode "INSERT"
446 builtin zle .vi-change-whole-line
447 }
448 zle -N vi-change-whole-line
449 bindkey -M vicmd "S" vi-change-whole-line
450
451 ### vi-insert (unbound) (i) (unbound)
452 ### Enter insert mode.
453
454 vi-insert() {
455 show_mode "INSERT"
456 builtin zle .vi-insert
457 }
458 zle -N vi-insert
459 bindkey -M vicmd "i" vi-insert
460
461 ### vi-insert-bol (unbound) (I) (unbound)
462 ### Move to the first non-blank character on the line
463 ### and enter insert mode.
464
465 vi-insert-bol() {
466 show_mode "INSERT"
467 builtin zle .vi-insert-bol
468 }
469 zle -N vi-insert-bol
470 bindkey -M vicmd "I" vi-insert-bol
471
472 ### vi-open-line-above (unbound) (O) (unbound)
473 ### Open a line above the cursor and enter insert mode.
474
475 vi-open-line-above() {
476 show_mode "INSERT"
477 builtin zle .vi-open-line-above
478 }
479 zle -N vi-open-line-above
480 bindkey -M vicmd "O" vi-open-line-above
481
482 ### vi-open-line-below (unbound) (o) (unbound)
483 ### Open a line below the cursor and enter insert mode.
484
485 vi-open-line-below() {
486 show_mode "INSERT"
487 builtin zle .vi-open-line-below
488 }
489 zle -N vi-open-line-below
490 bindkey -M vicmd "o" vi-open-line-below
491
492 ### vi-substitute (unbound) (s) (unbound)
493 ### Substitute the next character(s).
494
495 vi-substitute() {
496 show_mode "INSERT"
497 builtin zle .vi-substitute
498 }
499 zle -N vi-substitute
500 bindkey -M vicmd "s" vi-substitute
501
502
503 ### vi-replace (unbound) (R) (unbound)
504 ### Enter overwrite mode.
505 ###
506
507 vi-replace() {
508 show_mode "REPLACE"
509 builtin zle .vi-replace
510 }
511 zle -N vi-replace
512 bindkey -M vicmd "R" vi-replace
513
514 ### vi-cmd-mode (^X^V) (unbound) (^[)
515 ### Enter command mode; that is, select the `vicmd'
516 ### keymap. Yes, this is bound by default in emacs
517 ### mode.
518
519 vi-cmd-mode() {
520 show_mode "NORMAL"
521 builtin zle .vi-cmd-mode
522 }
523 zle -N vi-cmd-mode
524 bindkey -M viins "^[" vi-cmd-mode
525
526
527
528 ### vi-oper-swap-case
529 ### Read a movement command from the keyboard, and swap
530 ### the case of all characters from the cursor position
531 ### to the endpoint of the movement. If the movement
532 ### command is vi-oper-swap-case, swap the case of all
533 ### characters on the current line.
534 ###
535
536 bindkey -M vicmd "g~" vi-oper-swap-case
537
538
539
540 ### LOAD EXTENSIONS
541 zmodload zsh/parameter
542 # zmodload zftp
543
544 ### MISC
545
546 umask 022
547 mesg n
548 ulimit -c unlimited
549
550 # create iab's for my mutt-aliases to be sourced from within vim
551 # cat ~/.muttrc.aliases | sed -e 's/^#/"/' -e 's/^alias/iab/' > ~/.vim_mutt.aliases
552
553 # Colourize cursor on Linux console
554 # echo -e "\033[?17;216;64c"
555 # echo -e "\033[?17;215;55c"
556
557 ###### ### a clock in the prompt. Yes, this _is_ cool. But sometimes, it interferes with
558 ###### ### other things.
559 ###### ### I no longer need it as I have a running clock on my desktop when running
560 ###### ### X and a clock in screen's hardstatus line when running on the console
561 ###### trap CRON ALRM
562 ###### TMOUT=1
563 ###### CRON() {
564 ###### local STRING
565 ###### local COL
566 ###### local x
567 ###### STRING=$(date)
568 ###### COL=$[COLUMNS-5]
569 ###### COL=$[COL-$#STRING]
570 ###### x=$(echo $PREBUFFER | wc -l )
571 ###### x=$[x+1]
572 ###### echo -n "^[7^[[$x;A^[[$COL;G^[[0;37;44m-- $STRING --^[[0m^[8"
573 ###### }
574
575 ### thanks to Riviera for this one...
576 ### don't use it at the moment
577 #*Riviera* chpwd () {
578 #*Riviera* dirs >| $ZDOTDIR/zsave/zsh_dirstack_tty$tti
579 #*Riviera* }
580 #*Riviera* cdt () {
581 #*Riviera* cd $(cut -d\ -f1 ~/.zsh/zsave/zsh_dirstack_tty$1|sed s/~/${HOME:gs./.\\\\/}/g)
582 #*Riviera* }
583 #*Riviera* und
584 #*Riviera* in .zshrc
585 #*Riviera* dirs $(sed s/~/${HOME:gs./.\\\\/}/g $ZDOTDIR/zsave/zsh_dirstack_tty$tti)
586 #*Riviera* und in .zlogout nochmal das, was in chpwd steht.
587 #*Riviera*
588 #*Riviera* Damit kann ich 1. mit "cdt 3" in das in tty3 aktuelle Verzeichnis wechseln
589 #*Riviera* und 2. nach nem login wieder denselben dirstack vorfinden auf derselben tty wie vorm ausloggen.
590 #*Riviera* tti=$(tty)
591 #*Riviera* tti=${tti#*/dev/tty}
592 #*Riviera* Kommt noch dazu. Eigentlich hatte ich dann immer noch
593 #*Riviera* case $tti in
594 #*Riviera* [A-Za-z]*)tti=${tti%*[0-9]};;
595 #*Riviera* *);;
596 #*Riviera* esac
597 #*Riviera* aber das hab ich rausgenommen
598 #*Riviera* :)
599
600
601 ### COMPLETION AND MORE
602
603 # The following lines were added by compinstall
604 [[ -z $fpath[(r)$_compdir] ]] && fpath=($fpath $_compdir)
605 #fpath=(/home/tkoehler/zsh/foo $fpath)
606
607 autoload -U compinit
608 compinit
609
610 local _myhosts
611 _myhosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[0-9]*}%%\ *}%%,*})
612 # zstyle ':completion:*' hosts $_myhosts
613
614 zstyle ':completion:*' auto-description 'specify %d'
615 zstyle ':completion:*' completer _complete _ignored _match _correct _approximate _prefix
616 zstyle ':completion:*' file-sort name
617 zstyle ':completion:*' format 'Completing %d'
618 zstyle ':completion:*' group-name ''
619 ## domains to use for mutt user@host<TAB> completion
620 zstyle '*mutt*' hosts 'picard.franken.de' 'vim.org'
621 zstyle '*' hosts 'picard.franken.de' 'unser.linux.laeuft.auf.s390.org'
622 zstyle ':completion:*' list-prompt '%SAt %p: Hit TAB for more, or the character to insert%s'
623 zstyle ':completion:*' matcher-list 'r:|[._-]=** r:|=**' 'l:|=* r:|=*' 'm:{a-z}={A-Z}'
624 zstyle ':completion:*' match-original both
625 zstyle ':completion:*' max-errors 3
626 zstyle ':completion:*' menu select=0
627 zstyle ':completion:*' prompt 'CORRECT (%e errors found) > '
628 zstyle ':completion:*' special-dirs true
629 zstyle ':completion:*' squeeze-slashes true
630 zstyle '*mutt*' users vim vim-dev tkoehler
631 zstyle '*' users thomas tkoehler
632 zstyle ':completion:*' verbose true
633 zstyle :compinstall filename '/home/tkoehler/.zshrc'
634 # End of lines added by compinstall
635 #fpath=(/usr/share/doc/zsh/examples/Functions/Misc/ $fpath)
636 #autoload nslookup
637
638
639 zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
640 zstyle ':completion:*:*:*:*:hosts' list-colors '=(#b)(*)(to.com)=34;40=35;40' '=(#b)(*)(mayn.de)=36;40=35;40' '=unser.linux.laeuft.auf.s390.org=33;40' '=*=31;40'
641 zstyle ':completion:*:*:*:*:users' list-colors '=*=32;40'
642
643 autoload -U zfinit
644 zfinit