2 # Purpose: config file for zsh (z shell)
3 # Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
4 # Bug-Reports: see http://grml.org/bugs/
5 # License: This file is licensed under the GPL v2.
6 # Latest change: Mit Mai 23 10:22:10 CEST 2007 [mika]
7 ################################################################################
8 # This file is sourced only for interactive shells. It
9 # should contain commands to set up aliases, functions,
10 # options, key bindings, etc.
12 # Global Order: zshenv, zprofile, zshrc, zlogin
13 ################################################################################
16 # just execute 'ZSH_PROFILE_RC=1 zsh' and run 'zprof' to get the details
17 if [[ -n $ZSH_PROFILE_RC ]] ; then
22 # {{{ check for version/system
23 # check for versions (compatibility reasons)
24 if autoload is-at-least && is-at-least 2>/dev/null ; then
25 is4() { is-at-least 4 }
26 is42() { is-at-least 4.2 }
29 [[ $ZSH_VERSION == 4.* ]] && return 0
33 [[ $ZSH_VERSION == 4.<2->* ]] && return 0
40 [ -f /etc/grml_version ] && return 0
45 [ -f /etc/grml_cd ] && return 0
51 [[ ${${${(f)"$(</etc/grml_version)"}%% *}##*-} == 'small' ]] && return 0 ; return 1
54 isgrmlsmall() { return 1 }
57 # are we running within an utf environment?
59 case "$LANG $CHARSET $LANGUAGE" in
66 # check for user, if not running as root set $SUDO to sudo
67 (( EUID != 0 )) && SUDO='sudo' || SUDO=''
70 # creates an alias and precedes the command with
71 # sudo if $EUID is not zero.
72 local only=0 ; local multi=0
73 while [[ ${1} == -* ]] ; do
79 printf 'usage: salias [-h|-o|-a] <alias-expression>\n'
80 printf ' -h shows this help text.\n'
81 printf ' -a replace '\'' ; '\'' sequences with '\'' ; sudo '\''.\n'
82 printf ' be careful using this option.\n'
83 printf ' -o only sets an alias if a preceding sudo would be needed.\n'
86 (*) printf "unkown option: '%s'\n" "${1}" ; return 1 ;;
90 if (( ${#argv} > 1 )) ; then
91 printf 'Too many arguments %s\n' "${#argv}"
94 key="${1%%\=*}" ; val="${1#*\=}"
95 if (( EUID == 0 )) && (( only == 0 )); then
96 alias -- "${key}=${val}"
97 elif (( EUID > 0 )) ; then
98 (( multi > 0 )) && val="${val// ; / ; sudo }"
99 alias -- "${key}=sudo ${val}"
104 # change directory to home on first invocation of zsh
105 # important for rungetty -> autologin
106 # Thanks go to Bart Schaefer!
107 isgrml && checkhome() {
108 if [[ -z "$ALREADY_DID_CD_HOME" ]]; then
109 export ALREADY_DID_CD_HOME=$HOME
115 # {{{ set some variables
116 export EDITOR=${EDITOR:-vim}
117 export MAIL=${MAIL:-/var/mail/$USER}
118 # if we don't set $SHELL then aterm, rxvt,.. will use /bin/sh or /bin/bash :-/
119 export SHELL='/bin/zsh'
120 [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
121 [[ -x /usr/bin/dircolors ]] && eval `dircolors -b`
123 # Search path for the cd comman
126 # completion functions go to /etc/zsh/completion.d
127 # function files may be put into /etc/zsh/functions.d, from where they
128 # will be automatically autoloaded.
129 [[ -d /etc/zsh/completion.d ]] && fpath+=( /etc/zsh/completion.d )
130 if [[ -d /etc/zsh/functions.d ]] ; then
131 fpath+=( /etc/zsh/functions.d )
132 for func in /etc/zsh/functions.d/[^_]*[^~] ; do
133 autoload -U ${func:t}
137 # automatically remove duplicates from these arrays
138 typeset -U path cdpath fpath manpath
142 if [[ "$TERM" != emacs ]]; then
143 [[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char
144 [[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
145 [[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
146 [[ -z "$terminfo[kdch1]" ]] || bindkey -M vicmd "$terminfo[kdch1]" vi-delete-char
147 [[ -z "$terminfo[khome]" ]] || bindkey -M vicmd "$terminfo[khome]" vi-beginning-of-line
148 [[ -z "$terminfo[kend]" ]] || bindkey -M vicmd "$terminfo[kend]" vi-end-of-line
149 [[ -z "$terminfo[cuu1]" ]] || bindkey -M viins "$terminfo[cuu1]" vi-up-line-or-history
150 [[ -z "$terminfo[cuf1]" ]] || bindkey -M viins "$terminfo[cuf1]" vi-forward-char
151 [[ -z "$terminfo[kcuu1]" ]] || bindkey -M viins "$terminfo[kcuu1]" vi-up-line-or-history
152 [[ -z "$terminfo[kcud1]" ]] || bindkey -M viins "$terminfo[kcud1]" vi-down-line-or-history
153 [[ -z "$terminfo[kcuf1]" ]] || bindkey -M viins "$terminfo[kcuf1]" vi-forward-char
154 [[ -z "$terminfo[kcub1]" ]] || bindkey -M viins "$terminfo[kcub1]" vi-backward-char
156 [[ "$terminfo[kcuu1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcuu1]/O/[}" vi-up-line-or-history
157 [[ "$terminfo[kcud1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcud1]/O/[}" vi-down-line-or-history
158 [[ "$terminfo[kcuf1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcuf1]/O/[}" vi-forward-char
159 [[ "$terminfo[kcub1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcub1]/O/[}" vi-backward-char
160 [[ "$terminfo[khome]" == "
\eO"* ]] && bindkey -M viins "${terminfo[khome]/O/[}" beginning-of-line
161 [[ "$terminfo[kend]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kend]/O/[}" end-of-line
162 [[ "$terminfo[khome]" == "
\eO"* ]] && bindkey -M emacs "${terminfo[khome]/O/[}" beginning-of-line
163 [[ "$terminfo[kend]" == "
\eO"* ]] && bindkey -M emacs "${terminfo[kend]/O/[}" end-of-line
166 ## keybindings (run 'bindkeys' for details, more details via man zshzle)
167 # use emacs style per default:
172 #if [[ "$TERM" == screen ]]; then
173 bindkey '\e[1~' beginning-of-line # home
174 bindkey '\e[4~' end-of-line # end
175 bindkey "^[[A" up-line-or-search # cursor up
176 bindkey "^[[B" down-line-or-search # <ESC>-
177 bindkey '^x' history-beginning-search-backward # alternative ways of searching the shell history
178 # bindkey -s '^L' "|less\n" # ctrl-L pipes to less
179 # bindkey -s '^B' " &\n" # ctrl-B runs it in the background
180 # if terminal type is set to 'rxvt':
181 bindkey '\e[7~' beginning-of-line # home
182 bindkey '\e[8~' end-of-line # end
185 # insert unicode character
186 # usage example: 'ctrl-x i' 00A7 'ctrl-x i' will give you an ยง
187 # See for example http://unicode.org/charts/ for unicode characters code
188 autoload insert-unicode-char
189 zle -N insert-unicode-char
190 bindkey '^Xi' insert-unicode-char
192 # just type 'cd ...' to get 'cd ../..'
193 # rationalise-dot() {
194 # if [[ $LBUFFER = *.. ]]; then
200 # zle -N rationalise-dot
201 # bindkey . rationalise-dot
203 # bindkey '\eq' push-line-or-edit
206 # power completion - abbreviation expansion {{{
207 # power completion / abbreviation expansion / buffer expansion
208 # see http://zshwiki.org/home/examples/zleiab for details
209 # less risky than the global aliases but powerful as well
210 # just type the abbreviation key and afterwards ',.' to expand it
213 setopt interactivecomments
221 'G' '|& grep --color=auto'
223 'Hl' ' --help |& less -r'
228 'R' '| tr A-z N-za-m'
233 'hide' "echo -en '\033]50;nil2\007'"
234 'tiny' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-80-*-*-c-*-iso8859-15\007"'
235 'small' 'echo -en "\033]50;6x10\007"'
236 'medium' 'echo -en "\033]50;-misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-15\007"'
237 'default' 'echo -e "\033]50;-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-15\007"'
238 'large' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso8859-15\007"'
239 'huge' 'echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15\007"'
240 'smartfont' 'echo -en "\033]50;-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*\007"'
241 'semifont' 'echo -en "\033]50;-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15\007"'
245 'co' "./configure && make && sudo make install"
246 'CH' "./configure --help"
247 'conkeror' 'firefox -chrome chrome://conkeror/content'
249 'lad' $'ls -d .*(/)\n# only show dot-directories'
250 'lsa' $'ls -a .*(.)\n# only show dot-files'
251 'lss' $'ls -l *(s,S,t)\n# only files with setgid/setuid/sticky flag'
252 'lsl' $'ls -l *(@[1,10])\n# only symlinks'
253 'lsx' $'ls -l *(*[1,10])\n# only executables'
254 'lsw' $'ls -ld *(R,W,X.^ND/)\n# world-{readable,writable,executable} files'
255 'lsbig' $'ls -flh *(.OL[1,10])\n# display the biggest files'
256 'lsd' $'ls -d *(/)\n# only show directories'
257 'lse' $'ls -d *(/^F)\n# only show empty directories'
258 'lsnew' $'ls -rl *(D.om[1,10])\n# display the newest files'
259 'lsold' $'ls -rtlh *(D.om[-11,-1])\n # display the oldest files'
260 'lssmall' $'ls -Srl *(.oL[1,10])\n# display the smallest files'
262 '600' 'chmod u+rw-x,g-rwx,o-rwx'
264 '700' 'chmod u+rwx,g-rwx,o-rwx'
265 'r--' 'chmod u+r-wx,g-rwx,o-rwx'
266 '644' $'chmod u+rw-x,g+r-wx,o+r-wx\n # 4=r,2=w,1=x'
267 '755' 'chmod u+rwx,g+r-w+x,o+r-w+x'
269 'cmplayer' 'mplayer -vo -fs -zoom fbdev'
270 'fbmplayer' 'mplayer -vo -fs -zoom fbdev'
271 'fblinks' 'links2 -driver fb'
272 'insecssh' 'ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
273 'insecscp' 'scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
274 'fori' 'for i ({..}) { }'
277 'se' 'setopt interactivecomments'
278 'va' 'valac --vapidir=../vapi/ --pkg=gtk+-2.0 gtktest.vala'
279 'fb2' '=mplayer -vo fbdev -fs -zoom 1>/dev/null -xy 2'
280 'fb3' '=mplayer -vo fbdev -fs -zoom 1>/dev/null -xy 3'
282 'D' 'export DISPLAY=:0.0'
283 'mp' 'mplayer -vo xv -fs -zoom'
288 matched_chars='[.-|_a-zA-Z0-9]#'
289 LBUFFER=${LBUFFER%%(#m)[.-|_a-zA-Z0-9]#}
290 LBUFFER+=${abk[$MATCH]:-$MATCH}
294 bindkey ",." globalias
298 autoload -U zmv # who needs mmv or rename?
299 autoload history-search-end
301 # we don't want to quote/espace URLs on our own...
302 # if autoload -U url-quote-magic ; then
303 # zle -N self-insert url-quote-magic
304 # zstyle ':url-quote-magic:*' url-metas '*?[]^()~#{}='
306 # print 'Notice: no url-quote-magic available :('
308 alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magic'
310 alias run-help >&/dev/null && unalias run-help
311 autoload run-help # use via 'esc-h'
314 if autoload -U compinit && compinit 2>/dev/null ; then
315 compinit 2>/dev/null || print 'Notice: no compinit available :('
317 print 'Notice: no compinit available :('
322 is4 && autoload -U zed # use ZLE editor to edit a file or function
324 is4 && for mod in complist deltochar mathfunc ; do
325 zmodload -i zsh/${mod} 2>/dev/null || print "Notice: no ${mod} available :("
328 # autoload zsh modules when they are referenced
329 is4 && for opt mod in a stat \
333 zmodload -${opt} zsh/${mod} ${mod}
336 is4 && autoload -U insert-files && \
337 zle -N insert-files && \
338 bindkey "^Xf" insert-files # C-x-f
340 bindkey ' ' magic-space # also do history expansion on space
341 bindkey '\ei' menu-complete # menu completion via esc-i
343 # press esc-e for editing command line in $EDITOR or $VISUAL
344 is4 && autoload -U edit-command-line && \
345 zle -N edit-command-line && \
346 bindkey '\ee' edit-command-line
348 # menu selection: pick item but stay in the menu (press esc-return)
349 is4 && bindkey -M menuselect '\e^M' accept-and-menu-complete
351 # press "ctrl-e d" to insert the actual date in the form yyyy-mm-dd
352 _bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; }
353 bindkey '\C-ed' _bkdate
356 # press esc-m for inserting last typed word again (thanks to caphuso!)
357 insert-last-typed-word() { zle insert-last-word -- 0 -1 }; \
358 zle -N insert-last-typed-word; bindkey "\em" insert-last-typed-word
360 # set command prediction from history, see 'man 1 zshcontrib'
361 # is4 && autoload -U predict-on && \
362 # zle -N predict-on && \
363 # zle -N predict-off && \
364 # bindkey "^X^Z" predict-on && \
365 # bindkey "^Z" predict-off
367 # put job into foreground via ctrl-z:
368 bindkey -s '^z' "fg\n"
370 # press ctrl-q to quote line:
372 # zle beginning-of-line
374 # # RBUFFER="'$RBUFFER'"
375 # RBUFFER=${(q)RBUFFER}
378 # zle -N mquote && bindkey '^q' mquote
380 # run command line as user root via sudo:
381 _sudo-command-line() {
382 [[ $BUFFER != sudo\ * ]] && LBUFFER="sudo $LBUFFER"
384 zle -N sudo-command-line _sudo-command-line
385 bindkey "^Os" sudo-command-line
388 # {{{ set some important options
389 (( EUID != 0 )) && umask 002 || umask 022
392 setopt append_history # append history list to the history file (important for multiple parallel zsh sessions!)
393 is4 && setopt SHARE_HISTORY # import new commands from the history file also in other zsh-session
394 setopt extended_history # save each command's beginning timestamp and the duration to the history file
395 is4 && setopt histignorealldups # If a new command line being added to the history
396 # list duplicates an older one, the older command is removed from the list
397 setopt histignorespace # remove command lines from the history list when
398 # the first character on the line is a space
399 # setopt histallowclobber # add `|' to output redirections in the history
400 # setopt NO_clobber # warning if file exists ('cat /dev/null > ~/.zshrc')
401 setopt auto_cd # if a command is issued that can't be executed as a normal command,
402 # and the command is the name of a directory, perform the cd command to that directory
403 setopt extended_glob # in order to use #, ~ and ^ for filename generation
404 # grep word *~(*.gz|*.bz|*.bz2|*.zip|*.Z) ->
405 # -> searches for word not in compressed files
406 # don't forget to quote '^', '~' and '#'!
407 setopt notify # report the status of backgrounds jobs immediately
408 setopt hash_list_all # Whenever a command completion is attempted, make sure \
409 # the entire command path is hashed first.
410 setopt completeinword # not just at the end
411 # setopt nocheckjobs # don't warn me about bg processes when exiting
412 setopt nohup # and don't kill them, either
413 # setopt printexitvalue # alert me if something failed
414 # setopt dvorak # with spelling correction, assume dvorak kb
415 setopt auto_pushd # make cd push the old directory onto the directory stack.
416 setopt nonomatch # try to avoid the 'zsh: no matches found...'
417 setopt nobeep # avoid "beep"ing
419 MAILCHECK=30 # mailchecks
420 REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 secondes
421 watch=(notme root) # watch for everyone but me and root
423 # define word separators (for stuff like backward-word, forward-word, backward-kill-word,..)
424 # WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default
426 # WORDCHARS='*?_[]~=&;!#$%^(){}'
427 # WORDCHARS='${WORDCHARS:s@/@}'
429 # only slash should be considered as a word separator:
430 slash-backward-kill-word() {
431 local WORDCHARS="${WORDCHARS:s@/@}"
433 zle backward-kill-word
435 zle -N slash-backward-kill-word
436 bindkey '\ev' slash-backward-kill-word # press esc-v to delete a word until its last '/' (not the same as ctrl-w!)
440 export ZSHDIR=$HOME/.zsh
441 HISTFILE=$HOME/.zsh_history
442 isgrmlcd && HISTSIZE=500 || HISTSIZE=5000
443 isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history
446 # dirstack handling {{{
448 if [[ -f ~/.zdirs ]] && [[ ${#dirstack[*]} -eq 0 ]]; then
449 dirstack=( ${(uf)"$(< ~/.zdirs)"} )
450 # "cd -" won't work after login by just setting $OLDPWD, so
451 [[ -d $dirstack[0] ]] && cd $dirstack[0] && cd $OLDPWD
454 builtin dirs -pl >! ~/.zdirs
458 # {{{ display battery status on right side of prompt via running 'BATTERY=1 zsh'
459 if [ -n "$BATTERY" ] ; then
460 if [ -x $(which acpi) ] ; then
461 PERCENT="${(C)${(s| |)$(acpi 2>/dev/null)}[4]}"
462 [ -z "$PERCENT" ] && PERCENT='acpi not present'
463 if [ "${PERCENT%%%}" -lt 20 ] ; then
464 PERCENT="warning: ${PERCENT}%"
471 if autoload promptinit && promptinit 2>/dev/null ; then
472 promptinit # people should be able to use their favourite prompt
474 print 'Notice: no promptinit available :('
477 # precmd() => a function which is executed just before each prompt
478 # use 'NOPRECMD=1' to disable the precmd + preexec commands
480 # precmd () { setopt promptsubst; [[ -o interactive ]] && jobs -l;
482 # make sure to use right prompt only when not running a command
483 is4 && setopt transient_rprompt
485 is4 && [[ -z $NOPRECMD ]] && precmd () {
486 [[ -n $NOPRECMD ]] && return 0
487 # allow manual overwriting of RPROMPT
488 if [[ -n $RPROMPT ]] ; then
489 [[ $TERM == screen* ]] && echo -n $'\ekzsh\e\\'
492 # just use DONTSETRPROMPT=1 to be able to overwrite RPROMPT
493 if [[ -z $DONTSETRPROMPT ]] ; then
494 if [[ -n $BATTERY ]] ; then
495 RPROMPT="%(?..:()% ${PERCENT}${SCREENTITLE}"
496 # RPROMPT="${PERCENT}${SCREENTITLE}"
498 RPROMPT="%(?..:()% ${SCREENTITLE}"
499 # RPROMPT="${SCREENTITLE}"
502 # adjust title of xterm
503 # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
504 case $TERM in (xterm*|rxvt)
505 print -Pn "\e]0;%n@%m: %~\a"
510 # chpwd () => a function which is executed whenever the directory is changed
512 # preexec() => a function running before every command
513 is4 && [[ -z $NOPRECMD ]] && preexec () {
514 [[ -n $NOPRECMD ]] && return 0
515 # set hostname if not running on host with name 'grml'
516 local HOSTNAME=$(hostname)
517 if [[ "$HOSTNAME" != grml ]] ; then
520 # get the name of the program currently running and hostname of local machine
521 # set screen window title if running in a screen
522 if [[ "$TERM" == screen* ]]; then
523 # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # dont't use hostname
524 local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
525 echo -ne "\ek$CMD\e\\"
527 # set the screen title to "zsh" when sitting at the command prompt:
528 if [[ "$TERM" == screen* ]]; then
529 SCREENTITLE=$'%{\ekzsh\e\\%}'
533 # adjust title of xterm
534 case $TERM in (xterm*|rxvt)
535 print -Pn "\e]0;%n@%m: $1\a"
541 if autoload colors && colors 2>/dev/null ; then
542 BLUE="%{${fg[blue]}%}"
543 RED="%{${fg_bold[red]}%}"
544 GREEN="%{${fg[green]}%}"
545 CYAN="%{${fg[cyan]}%}"
546 WHITE="%{${fg[white]}%}"
547 NO_COLOUR="%{${reset_color}%}"
554 NO_COLOUR="%{
\e[0m%}"
557 EXITCODE="%(?..%?%1v )"
558 PS2='`%_> ' # secondary prompt, printed when the shell needs more information to complete a command.
559 PS3='?# ' # selection prompt used within a select loop.
560 PS4='+%N:%i:%_> ' # the execution trace prompt (setopt xtrace). default: '+%N:%i>'
562 # set variable debian_chroot if running in a chroot with /etc/debian_chroot
563 if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
564 debian_chroot=$(cat /etc/debian_chroot)
567 # don't use colors on dumb terminals (like emacs):
568 if [[ "$TERM" == dumb ]] ; then
569 PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< %# "
571 # only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended prompt
572 # set variable identifying the chroot you work in (used in the prompt below)
573 if [[ -n $GRMLPROMPT ]]; then
574 PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D
575 ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# "
577 if (( EUID != 0 )); then
578 PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
580 PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
585 # if we are inside a grml-chroot set a specific prompt theme
586 if [ -n "$GRML_CHROOT" ] ; then
587 PROMPT="%{$fg[red]%}(CHROOT) %{$fg_bold[red]%}%n%{$fg_no_bold[white]%}@%m %40<...<%B%~%b%<< %\# "
591 # {{{ 'hash' some often used directories
592 hash -d deb=/var/cache/apt/archives
593 hash -d doc=/usr/share/doc
594 hash -d linux=/lib/modules/$(command uname -r)/build/
596 hash -d slog=/var/log/syslog
598 hash -d templ=/usr/share/doc/grml-templates
599 hash -d tt=/usr/share/doc/texttools-doc
604 if [ $UID = 0 ] ; then
605 [ -r /etc/grml/screenrc ] && alias screen='/usr/bin/screen -c /etc/grml/screenrc'
606 elif [ -r $HOME/.screenrc ] ; then
607 alias screen="/usr/bin/screen -c $HOME/.screenrc"
609 [ -r /etc/grml/screenrc_grml ] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml'
612 if ls --help 2>/dev/null |grep -- --color= >/dev/null && [ "$TERM" != dumb ] ; then
613 alias ls='ls -b -CF --color=auto' # do we have GNU ls with color-support?
614 alias la='ls -la --color=auto'
615 alias ll='ls -l --color=auto'
616 alias lh='ls -hAl --color=auto'
617 alias l='ls -lF --color=auto'
626 alias mdstat='cat /proc/mdstat'
627 alias ...='cd ../../'
629 alias cp='nocorrect cp' # no spelling correction on cp
630 alias mkdir='nocorrect mkdir' # no spelling correction on mkdir
631 alias mv='nocorrect mv' # no spelling correction on mv
632 alias rm='nocorrect rm' # no spelling correction on rm
637 # see http://www.cl.cam.ac.uk/~mgk25/unicode.html#term for details
638 alias term2iso="echo 'Setting terminal to iso mode' ; echo -e '
\e%@'"
639 alias term2utf="echo 'Setting terminal to utf-8 mode'; echo -e '
\e%G'"
641 alias utf2iso='if isutfenv ; then
642 for ENV in `env | grep UTF` ; do
643 eval export "$(echo $ENV | sed 's/UTF-8/iso885915/')"
646 alias iso2utf='if isutfenv ; then
647 for ENV in `env | grep '\.iso'` ; do
648 eval export "$(echo $ENV | sed 's/iso.*/UTF-8/')"
652 # set up software synthesizer via speakup
654 aumix -w 90 -v 90 -p 90 -m 90
655 if ! [ -r /dev/softsynth ] ; then
656 flite -o play -t "Sorry, software synthesizer not available. Did you boot with swspeak bootoption?"
662 nice -n -20 speechd-up
664 flite -o play -t "Finished setting up software synthesizer"
668 # I like clean prompt, so provide simple way to get that
669 alias 0 &>/dev/null || functions 0 &>/dev/null || alias 0='return 0'
671 # truecrypt; use e.g. via 'truec /dev/ice /mnt/ice' or 'truec -i'
672 if [ -x /usr/sbin/truecrypt ] ; then
674 alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077,utf8" '
676 alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077" '
680 zsh-help(){print "$bg[white]$fg[black]
681 zsh-help - hints for use of zsh on grml
682 =======================================$reset_color
684 Main configuration of zsh happens in /etc/zsh/zshrc (global)
685 and /etc/skel/.zshrc which is copied to \$HOME/.zshrc once.
686 The files are part of the package grml-etc-core, if you want to
687 use them on a non-grml-system just get the tar.gz from
688 http://deb.grml.org/ or get the files from the mercurial
691 http://hg.grml.org/grml-etc-core/raw-file/tip/etc/skel/.zshrc
692 http://hg.grml.org/grml-etc-core/raw-file/tip/etc/zsh/zshrc
694 If you want to stay in sync with zsh configuration of grml
695 run 'ln -sf /etc/skel/.zshrc \$HOME/.zshrc' and configure
696 your own stuff in \$HOME/.zshrc.local. System wide configuration
697 without touching configuration files of grml can take place
698 in /etc/zsh/zshrc.local.
700 If you want to use the configuration of user grml also when
701 running as user root just run 'zshskel' which will source
702 the file /etc/skel/.zshrc.
704 For information regarding zsh start at http://grml.org/zsh/
706 Take a look at grml's zsh refcard:
707 % xpdf =(zcat /usr/share/doc/grml-docs/zsh/grml-zsh-refcard.pdf.gz)
709 Check out the main zsh refcard:
710 % $BROWSER http://www.bash2zsh.com/zsh_refcard/refcard.pdf
712 And of course visit the zsh-lovers:
715 You can adjust some options through environment variables when
716 invoking zsh without having to edit configuration files.
717 Basically meant for bash users who are not used to the power of
720 \"NOCOR=1 zsh\" => deactivate automatic correction
721 \"NOMENU=1 zsh\" => do not use menu completion (note: use strg-d for completion instead!)
722 \"NOPRECMD=1 zsh\" => disable the precmd + preexec commands (set GNU screen title)
723 \"BATTERY=1 zsh\" => activate battery status (via acpi) on right side of prompt
725 Please report wishes + bugs to the grml-team: http://grml.org/bugs/
726 Enjoy your grml system with the zsh!$reset_color"
730 if [ -r /etc/debian_version ] ; then
731 alias acs='apt-cache search'
732 alias acsh='apt-cache show'
733 alias acp='apt-cache policy'
734 salias adg="apt-get dist-upgrade"
735 salias agi="apt-get install"
736 salias ati="aptitude install"
737 salias ag="apt-get upgrade"
738 salias au="apt-get update"
739 salias -a up="aptitude update ; aptitude upgrade"
740 alias dbp='dpkg-buildpackage'
741 alias ge='grep-excuses'
745 if [ -z "$1" ] ; then
747 $SUDO apt-get -u upgrade
749 ssh $1 $SUDO apt-get update
750 # ask before the upgrade
752 ssh $1 $SUDO apt-get --no-act upgrade
753 echo -n 'Process the upgrade?'
755 if [[ $dummy == "y" ]] ; then
756 ssh $1 $SUDO apt-get -u upgrade --yes
761 isgrmlcd && alias su="sudo su" # change to user root
762 alias tlog="tail -f /var/log/syslog" # take a look at the syslog
763 alias zshskel="source /etc/skel/.zshrc" # source skeleton zshrc
766 # sort installed Debian-packages by size
767 if [ -x /usr/bin/grep-status ] ; then
768 alias debs-by-size='grep-status -FStatus -sInstalled-Size,Package \
769 -n "install ok installed" | paste -sd " \n" | sort -rn'
772 # if cdrecord is a symlink (to wodim) or isn't present at all warn:
773 if [ -L /usr/bin/cdrecord -o ! -x $(which cdrecord) ] ; then
774 if [ -x $(which wodim) ] ; then
775 alias cdrecord="echo 'cdrecord is not provided under its original name by Debian anymore.
776 See #377109 in the BTS of Debian for more details.
778 Please use the wodim binary instead' ; return 1"
782 # get_tw_cli has been renamed into get_3ware
783 if [ -x /usr/bin/get_3ware ] ; then
785 echo 'Warning: get_tw_cli has been renamed into get_3ware. Invoking get_3ware for you.'>&2
790 # I hate lacking backward compability, so provide an alternative therefore
791 if ! [ -x /usr/sbin/apache2-ssl-certificate ] ; then
792 function apache2-ssl-certificate(){
794 print 'Debian does not ship apache2-ssl-certificate anymore (see #398520). :('
795 print 'You might want to take a look at Debian the package ssl-cert as well.'
796 print 'To generate a certificate for use with apache2 follow the instructions:'
800 export RANDFILE=/dev/random
801 mkdir /etc/apache2/ssl/
802 openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem
803 chmod 600 /etc/apache2/ssl/apache.pem
805 Run "grml-tips ssl-certificate" if you need further instructions.
811 # {{{ Use hard limits, except for a smaller stack and no core dumps
814 isgrmlcd && limit core 0 # important for a live-cd-system
818 # {{{ completion stuff
820 # called later (via is4 && grmlcomp)
821 # notice: use 'zstyle' for getting current settings
822 # press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
825 zstyle ':completion:*:approximate:' max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )' # allow one error for every three characters typed in approximate completer
826 zstyle ':completion:*:complete:-command-::commands' ignored-patterns '*\~' # don't complete backup files as executables
827 zstyle ':completion:*:correct:*' insert-unambiguous true # start menu completion only if it could find no unambiguous initial string
828 zstyle ':completion:*:corrections' format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}' #
829 zstyle ':completion:*:correct:*' original true #
830 zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} # activate color-completion(!)
831 zstyle ':completion:*:descriptions' format $'%{\e[0;31m%}completing %B%d%b%{\e[0m%}' # format on completion
832 zstyle ':completion:*:*:cd:*:directory-stack' menu yes select # complete 'cd -<tab>' with menu
833 zstyle ':completion:*:expand:*' tag-order all-expansions # insert all expansions for expand completer
834 zstyle ':completion:*:history-words' list false #
835 zstyle ':completion:*:history-words' menu yes # activate menu
836 zstyle ':completion:*:history-words' remove-all-dups yes # ignore duplicate entries
837 zstyle ':completion:*:history-words' stop yes #
838 zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # match uppercase from lowercase
839 zstyle ':completion:*:matches' group 'yes' # separate matches into groups
840 zstyle ':completion:*' group-name ''
841 if [[ -z "$NOMENU" ]] ; then
842 zstyle ':completion:*' menu select=5 # if there are more than 5 options allow selecting from a menu
844 setopt no_auto_menu # don't use any menus at all
846 zstyle ':completion:*:messages' format '%d' #
847 zstyle ':completion:*:options' auto-description '%d' #
848 zstyle ':completion:*:options' description 'yes' # describe options in full
849 zstyle ':completion:*:processes' command 'ps -au$USER' # on processes completion complete all user processes
850 zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters # offer indexes before parameters in subscripts
851 zstyle ':completion:*' verbose true # provide verbose completion information
852 zstyle ':completion:*:warnings' format $'%{\e[0;31m%}No matches for:%{\e[0m%} %d' # set format for warnings
853 zstyle ':completion:*:*:zcompile:*' ignored-patterns '(*~|*.zwc)' # define files to ignore for zcompile
854 zstyle ':completion:correct:' prompt 'correct to: %e' #
855 zstyle ':completion::(^approximate*):*:functions' ignored-patterns '_*' # Ignore completion functions for commands you don't have:
857 # complete manual by their section
858 zstyle ':completion:*:manuals' separate-sections true
859 zstyle ':completion:*:manuals.*' insert-sections true
860 zstyle ':completion:*:man:*' menu yes select
863 # run rehash on completion so new installed program are found automatically:
865 (( CURRENT == 1 )) && rehash
866 return 1 # Because we didn't really complete anything
868 # some people don't like the automatic correction - so run 'NOCOR=1 zsh' to deactivate it
869 if [[ -n "$NOCOR" ]] ; then
870 zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _files
871 setopt nocorrect # do not try to correct the spelling if possible
873 # zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _correct _approximate _files
874 setopt correct # try to correct the spelling if possible
875 zstyle -e ':completion:*' completer '
876 if [[ $_last_try != "$HISTNO$BUFFER$CURSOR" ]]; then
877 _last_try="$HISTNO$BUFFER$CURSOR"
878 reply=(_complete _match _prefix _files)
880 if [[ $words[1] = (rm|mv) ]]; then
881 reply=(_complete _files)
883 reply=(_oldlist _expand _force_rehash _complete _correct _approximate _files)
887 # zstyle ':completion:*' completer _complete _correct _approximate
888 # zstyle ':completion:*' expand prefix suffix
890 # automatic rehash? Credits go to Frank Terbeck
891 # function my_accept () {
893 # [[ -z ${BUFFER} ]] && zle accept-line && return
894 # buf=( ${(z)BUFFER} )
895 # [[ -z ${commands[${buf[1]}]} ]] && rehash
899 # bindkey "^M" my_accept
901 # command for process lists, the local web server details and host completion
902 zstyle ':completion:*:urls' local 'www' '/var/www/' 'public_html'
905 [ -d $ZSHDIR/cache ] && zstyle ':completion:*' use-cache yes && \
906 zstyle ':completion::complete:*' cache-path $ZSHDIR/cache/
908 # host completion /* add brackets as vim can't parse zsh's complex cmdlines 8-) {{{ */
910 [ -r ~/.ssh/known_hosts ] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()
911 [ -r /etc/hosts ] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} || _etc_hosts=()
923 zstyle ':completion:*:hosts' hosts $hosts
924 # zstyle '*' hosts $hosts
926 # specify your logins:
928 # {grml,grml1}@foo.invalid
929 # grml-devel@bar.invalid
932 # {fred,root}@foo.invalid
935 # zstyle ':completion:*:my-accounts' users-hosts $my_accounts
936 # zstyle ':completion:*:other-accounts' users-hosts $other_accounts
938 # specify specific port/service settings:
939 # telnet_users_hosts_ports=(
942 # @mail-server:{smtp,pop3}
946 # zstyle ':completion:*:*:telnet:*' users-hosts-ports $telnet_users_hosts_ports
948 # use generic completion system for programs not yet defined:
949 compdef _gnu_generic tail head feh cp mv df stow uname ipacsum fetchipac
951 # see upgrade function in this file
952 compdef _hosts upgrade
958 # people should use 'grml-x'!
960 if [ -e /etc/X11/xorg.conf ] ; then
961 [ -x /usr/bin/startx ] && /usr/bin/startx || /usr/X11R6/bin/startx
963 echo "Please use the script \"grml-x\" for starting the X Window System
964 because there does not exist /etc/X11/xorg.conf yet.
965 If you want to use startx anyway please call \"/usr/bin/startx\"."
971 if [ -e /etc/X11/xorg.conf ] ; then
972 [ -x /usr/bin/xinit ] && /usr/bin/xinit || /usr/X11R6/bin/xinit
974 echo "Please use the script \"grml-x\" for starting the X Window System.
975 because there does not exist /etc/X11/xorg.conf yet.
976 If you want to use xinit anyway please call \"/usr/bin/xinit\"."
981 if [ -x /usr/sbin/915resolution ] ; then
982 alias 855resolution='echo -e "Please use 915resolution as resolution modify tool for Intel graphic chipset."; return -1'
985 alias grml-version='cat /etc/grml_version'
987 if [ -x /usr/sbin/rebuildfstab ] ; then
988 alias grml-rebuildfstab='rebuildfstab -v -r -config'
991 if [ -x /usr/sbin/grml-debootstrap ] ; then
992 alias debian2hd='print "Installing debian to harddisk is possible via using grml-debootstrap." ; return 1'
997 # {{{ now run the functions
999 is4 && isgrml && grmlstuff
1004 [ -r /etc/zsh/keephack ] && is4 && source /etc/zsh/keephack
1007 # {{{ wonderful idea of using "e" glob qualifier by Peter Stephenson
1008 # You use it as follows:
1009 # $ NTREF=/reference/file
1011 # This lists all the files in the current directory newer than the reference file.
1012 # You can also specify the reference file inline; note quotes:
1013 # $ ls -l *(e:'nt ~/.zshenv':)
1015 if [[ -n $1 ]]; then
1018 [[ $REPLY -nt $NTREF ]]
1022 # shell functions {{{
1023 setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility
1024 freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
1026 if [[ "$#*" -eq 0 ]]; then
1027 [ -r ~/.zshrc ] && . ~/.zshrc
1036 compdef _functions reload freload
1038 # list symlinks in detail (more detailed version of 'readlink -f' and 'whence -s')
1040 [ -z "$1" ] && printf 'Usage: %s <file(s)>\n' "$0" && return 1
1043 while [ -h "$file" ] ; do
1045 file=$(readlink "$file")
1050 # fast manual access
1051 if type -p qma &>/dev/null ; then
1052 manzsh() { qma zshall "$1" }
1055 manzsh() { /usr/bin/man zshall | vim -c "se ft=man| se hlsearch" +/"$1" - ; }
1056 # manzsh() { /usr/bin/man zshall | most +/"$1" ; }
1057 # manzsh() { man zshall | $MYLESS -p $1 ; }
1060 if [ -x /usr/bin/most ] ; then
1061 # use "dchange <package-name>" to view Debian's changelog of the package:
1063 if [ -r /usr/share/doc/${1}/changelog.Debian.gz ] ; then
1064 most /usr/share/doc/${1}/changelog.Debian.gz
1066 if [ -r /usr/share/doc/${1}/changelog.gz ] ; then
1067 most /usr/share/doc/${1}/changelog.gz
1069 echo "No changelog for package $1 found, sorry."
1074 _dchange() { _files -W /usr/share/doc -/ }
1075 compdef _dchange dchange
1077 # use "uchange <package-name>" to view upstream's changelog of the package:
1079 if [ -r /usr/share/doc/${1}/changelog.gz ] ; then
1080 most /usr/share/doc/${1}/changelog.gz
1082 echo "No changelog for package $1 found, sorry."
1086 _uchange() { _files -W /usr/share/doc -/ }
1087 compdef _uchange uchange
1092 ZSH_PROFILE_RC=1 $SHELL "$@"
1095 # edit alias via zle:
1097 [ -z "$1" ] && { echo "Usage: edalias <alias_to_edit>" ; return 1 } || vared aliases'[$1]' ;
1099 compdef _aliases edalias
1101 # edit function via zle:
1103 [ -z "$1" ] && { echo "Usage: edfun <function_to_edit>" ; return 1 } || zed -f "$1" ;
1105 compdef _functions edfunc
1107 # use it e.g. via 'Restart apache2'
1108 if [ -d /etc/init.d ] ; then
1109 for i in Start Restart Stop Force-Reload Reload ; do
1110 eval "$i() { $SUDO /etc/init.d/\$1 ${i:l} \$2 ; }"
1112 # now the completion for this:
1113 compctl -g "$(echo /etc/init.d/*(:t))" Start Restart Stop Force-Reload Reload
1116 # provide useful information on globbing
1123 p named pipes (FIFOs)
1124 * executable plain files (0100)
1125 % device files (character or block special)
1126 %b block special files
1127 %c character special files
1128 r owner-readable files (0400)
1129 w owner-writable files (0200)
1130 x owner-executable files (0100)
1131 A group-readable files (0040)
1132 I group-writable files (0020)
1133 E group-executable files (0010)
1134 R world-readable files (0004)
1135 W world-writable files (0002)
1136 X world-executable files (0001)
1137 s setuid files (04000)
1138 S setgid files (02000)
1139 t files with the sticky bit (01000)
1141 print *(m-1) # Files modified up to a day ago
1142 print *(a1) # Files accessed a day ago
1143 print *(@) # Just symlinks
1144 print *(Lk+50) # Files bigger than 50 kilobytes
1145 print *(Lk-50) # Files smaller than 50 kilobytes
1146 print **/*.c # All *.c files recursively starting in \$PWD
1147 print **/*.c~file.c # Same as above, but excluding 'file.c'
1148 print (foo|bar).* # Files starting with 'foo' or 'bar'
1149 print *~*.* # All Files that do not contain a dot
1150 chmod 644 *(.^x) # make all plain non-executable files publically readable
1151 print -l *(.c|.h) # Lists *.c and *.h
1152 print **/*(g:users:) # Recursively match all files that are owned by group 'users'
1153 echo /proc/*/cwd(:h:t:s/self//) # Analogous to >ps ax | awk '{print $1}'<"
1155 alias help-zshglob=H-Glob
1157 type -p qma &>/dev/null && alias ?='qma zshall'
1159 # grep for running process, like: 'any vim'
1161 if [ -z "$1" ] ; then
1162 echo "any - grep for process(es) by keyword" >&2
1163 echo "Usage: any <keyword>" >&2 ; return 1
1166 local LENGTH=$(expr length $STRING)
1167 local FIRSCHAR=$(echo $(expr substr $STRING 1 1))
1168 local REST=$(echo $(expr substr $STRING 2 $LENGTH))
1169 ps xauwww| grep "[$FIRSCHAR]$REST"
1173 # After resuming from suspend, system is paging heavilly, leading to very bad interactivity.
1174 # taken from $LINUX-KERNELSOURCE/Documentation/power/swsusp.txt
1175 [ -r /proc/1/maps ] && deswap() {
1176 print 'Reading /proc/[0-9]*/maps and sending output to /dev/null, this might take a while.'
1177 cat $(sed -ne 's:.* /:/:p' /proc/[0-9]*/maps | sort -u | grep -v '^/dev/') > /dev/null
1178 print 'Finished, running "swapoff -a; swapon -a" may also be useful.'
1181 # print hex value of a number
1183 [ -n "$1" ] && printf "%x\n" $1 || { print 'Usage: hex <number-to-convert>' ; return 1 }
1186 # calculate (or eval at all ;-)) with perl => p[erl-]eval
1187 # hint: also take a look at zcalc -> 'autoload zcalc' -> 'man zshmodules | less -p MATHFUNC'
1189 [ -n "$1" ] && CALC="$*" || print "Usage: calc [expression]"
1190 perl -e "print eval($CALC),\"\n\";"
1192 functions peval &>/dev/null && alias calc=peval
1194 # brltty seems to have problems with utf8 environment and/or font Uni3-Terminus16 under
1195 # certain circumstances, so work around it, no matter which environment we have
1197 if [ -z "$DISPLAY" ] ; then
1198 consolechars -f /usr/share/consolefonts/default8x16.psf.gz
1205 # Switching shell safely and efficiently? http://www.zsh.org/mla/workers/2001/msg02410.html
1207 # NO_SWITCH="yes" command bash "$@"
1210 # exec $SHELL $SHELL_ARGS "$@"
1215 # log out? set timeout in seconds {{{
1217 # do not log out in some specific terminals:
1218 # if [[ "${TERM}" == ([Exa]term*|rxvt|dtterm|screen*) ]]; then
1223 # {{{ make sure our environment is clean regarding colors
1224 for color in BLUE RED GREEN CYAN WHITE ; unset $color
1227 # source another config file if present {{{
1228 if [ -r /etc/zsh/zshrc.local ]; then
1229 source /etc/zsh/zshrc.local
1233 # "persistent history" {{{
1234 # just write important commands you always need to ~/.important_commands
1235 if [ -r ~/.important_commands ] ; then
1236 fc -R ~/.important_commands
1240 ## END OF FILE #################################################################
1241 # vim:foldmethod=marker expandtab