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: Son Nov 19 14:45:18 CET 2006 [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 ################################################################################
15 # {{{ check for version/system
16 # check for versions (compatibility reasons)
17 if autoload is-at-least && is-at-least 2>/dev/null ; then
18 is4() { is-at-least 4 }
19 is42() { is-at-least 4.2 }
22 [[ $ZSH_VERSION == 4.* ]] && return 0
26 [[ $ZSH_VERSION == 4.<2->* ]] && return 0
33 [ -f /etc/grml_version ] && return 0
38 [ -f /etc/grml_cd ] && return 0
44 [[ ${${${(f)"$(</etc/grml_version)"}%% *}##*-} == 'small' ]] && return 0 ; return 1
47 isgrmlsmall() { return 1 }
50 # check for user, if not running as root set $SUDO to sudo
51 (( EUID != 0 )) && SUDO='sudo' || SUDO=''
53 # change directory to home on first invocation of zsh
54 # important for rungetty -> autologin
55 # Thanks go to Bart Schaefer!
56 isgrml && checkhome() {
57 if [[ -z "$ALREADY_DID_CD_HOME" ]]; then
58 export ALREADY_DID_CD_HOME=$HOME
64 # {{{ set some variables
65 export EDITOR=${EDITOR:-vim}
66 export MAIL=${MAIL:-/var/mail/$USER}
67 [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
68 [[ -x /usr/bin/dircolors ]] && eval `dircolors -b`
70 # Search path for the cd comman
73 # Support our own site-functions
74 [ -d /etc/zsh/site-functions ] && FPATH=/etc/zsh/site-functions:$FPATH
76 # automatically remove duplicates from these arrays
77 typeset -U path cdpath fpath manpath
81 if [[ "$TERM" != emacs ]]; then
82 [[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char
83 [[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
84 [[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
85 [[ -z "$terminfo[kdch1]" ]] || bindkey -M vicmd "$terminfo[kdch1]" vi-delete-char
86 [[ -z "$terminfo[khome]" ]] || bindkey -M vicmd "$terminfo[khome]" vi-beginning-of-line
87 [[ -z "$terminfo[kend]" ]] || bindkey -M vicmd "$terminfo[kend]" vi-end-of-line
88 [[ -z "$terminfo[cuu1]" ]] || bindkey -M viins "$terminfo[cuu1]" vi-up-line-or-history
89 [[ -z "$terminfo[cuf1]" ]] || bindkey -M viins "$terminfo[cuf1]" vi-forward-char
90 [[ -z "$terminfo[kcuu1]" ]] || bindkey -M viins "$terminfo[kcuu1]" vi-up-line-or-history
91 [[ -z "$terminfo[kcud1]" ]] || bindkey -M viins "$terminfo[kcud1]" vi-down-line-or-history
92 [[ -z "$terminfo[kcuf1]" ]] || bindkey -M viins "$terminfo[kcuf1]" vi-forward-char
93 [[ -z "$terminfo[kcub1]" ]] || bindkey -M viins "$terminfo[kcub1]" vi-backward-char
95 [[ "$terminfo[kcuu1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcuu1]/O/[}" vi-up-line-or-history
96 [[ "$terminfo[kcud1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcud1]/O/[}" vi-down-line-or-history
97 [[ "$terminfo[kcuf1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcuf1]/O/[}" vi-forward-char
98 [[ "$terminfo[kcub1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcub1]/O/[}" vi-backward-char
99 [[ "$terminfo[khome]" == "
\eO"* ]] && bindkey -M viins "${terminfo[khome]/O/[}" beginning-of-line
100 [[ "$terminfo[kend]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kend]/O/[}" end-of-line
101 [[ "$terminfo[khome]" == "
\eO"* ]] && bindkey -M emacs "${terminfo[khome]/O/[}" beginning-of-line
102 [[ "$terminfo[kend]" == "
\eO"* ]] && bindkey -M emacs "${terminfo[kend]/O/[}" end-of-line
105 ## keybindings (run 'bindkeys' for details, more details via man zshzle)
106 # use emacs style per default
111 #if [[ "$TERM" == screen ]]; then
112 bindkey '\e[1~' beginning-of-line # home
113 bindkey '\e[4~' end-of-line # end
114 bindkey "^[[A" up-line-or-search # cursor up
115 bindkey "^[[B" down-line-or-search # <ESC>-
116 bindkey '^x' history-beginning-search-backward # alternative ways of searching the shell history
117 # bindkey -s '^L' "|less\n" # ctrl-L pipes to less
118 # bindkey -s '^B' " &\n" # ctrl-B runs it in the background
119 # if terminal type is set to 'rxvt':
120 bindkey '\e[7~' beginning-of-line # home
121 bindkey '\e[8~' end-of-line # end
124 # bindkey '\eq' push-line-or-edit
128 autoload -U zmv # who needs mmv or rename?
129 autoload history-search-end
131 # we don't want to quote/espace URLs on our own...
132 # avoid 'url-quote-magic: function definition file not found' on some older boxes
133 if [ -f "/usr/share/zsh/$ZSH_VERSION/functions/Zle/url-quote-magic" ] && \
134 autoload -U url-quote-magic && zle -N self-insert url-quote-magic ; then
135 zle -N self-insert url-quote-magic
137 print 'Notice: no url-quote-magic available :('
140 alias run-help >&/dev/null && unalias run-help
141 autoload run-help # use via 'esc-h'
144 if autoload -U compinit && [ -f "/usr/share/zsh/$ZSH_VERSION/functions/Completion/compinit" ] && compinit 2>/dev/null ; then
147 print 'Notice: no compinit available :('
151 is4 && autoload -U zed # use ZLE editor to edit a file or function
154 for mod in complist deltochar mathfunc ; do
155 zmodload -i zsh/${mod}
157 # autoload zsh modules when they are referenced
159 for opt mod in a stat \
163 zmodload -${opt} zsh/${mod} ${mod}
167 is4 && autoload -U insert-files && \
168 zle -N insert-files && \
169 bindkey "^Xf" insert-files # C-x-f
171 bindkey ' ' magic-space # also do history expansion on space
172 bindkey '\ei' menu-complete # menu completion via esc-i
174 # press esc-e for editing command line in $EDITOR or $VISUAL
175 is4 && autoload -U edit-command-line && \
176 zle -N edit-command-line && \
177 bindkey '\ee' edit-command-line
179 ## menu selection: pick item but stay in the menu (press esc-return)
180 is4 && bindkey -M menuselect '\e^M' accept-and-menu-complete
182 # press "ctrl-e d" to insert the actual date in the form yyyy-mm-dd
183 _bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; }
184 bindkey '\C-ed' _bkdate
187 # press esc-m for inserting last typed word again (thanks to caphuso!)
188 insert-last-typed-word() { zle insert-last-word -- 0 -1 }; \
189 zle -N insert-last-typed-word; bindkey "\em" insert-last-typed-word
191 # set command prediction from history, see 'man 1 zshcontrib'
192 # is4 && autoload -U predict-on && \
193 # zle -N predict-on && \
194 # zle -N predict-off && \
195 # bindkey "^X^Z" predict-on && \
196 # bindkey "^Z" predict-off
198 # put job into foreground via ctrl-z:
199 bindkey -s '^z' "fg\n"
201 # press ctrl-q to quote line:
203 # zle beginning-of-line
205 # # RBUFFER="'$RBUFFER'"
206 # RBUFFER=${(q)RBUFFER}
209 # zle -N mquote && bindkey '^q' mquote
211 # run command line as user root via sudo:
212 _sudo-command-line() {
213 [[ $BUFFER != sudo\ * ]] && LBUFFER="sudo $LBUFFER"
215 zle -N sudo-command-line _sudo-command-line
216 bindkey "^Os" sudo-command-line
219 # {{{ set some important options
223 setopt append_history # append history list to the history file (important for multiple parallel zsh sessions!)
224 is4 && setopt SHARE_HISTORY # import new commands from the history file also in other zsh-session
225 setopt extended_history # save each command's beginning timestamp and the duration to the history file
226 is4 && setopt histignorealldups # If a new command line being added to the history
227 # list duplicates an older one, the older command is removed from the list
228 setopt histignorespace # remove command lines from the history list when
229 # the first character on the line is a space
230 # setopt histallowclobber # add `|' to output redirections in the history
231 # setopt NO_clobber # warning if file exists ('cat /dev/null > ~/.zshrc')
232 setopt auto_cd # if a command is issued that can't be executed as a normal command,
233 # and the command is the name of a directory, perform the cd command to that directory
234 setopt extended_glob # in order to use #, ~ and ^ for filename generation
235 # grep word *~(*.gz|*.bz|*.bz2|*.zip|*.Z) ->
236 # -> searches for word not in compressed files
237 # don't forget to quote '^', '~' and '#'!
238 setopt notify # report the status of backgrounds jobs immediately
239 setopt hash_list_all # Whenever a command completion is attempted, make sure \
240 # the entire command path is hashed first.
241 setopt completeinword # not just at the end
242 # setopt nocheckjobs # don't warn me about bg processes when exiting
243 setopt nohup # and don't kill them, either
244 # setopt printexitvalue # alert me if something failed
245 # setopt dvorak # with spelling correction, assume dvorak kb
246 setopt auto_pushd # make cd push the old directory onto the directory stack.
247 setopt nonomatch # try to avoid the 'zsh: no matches found...'
248 setopt nobeep # avoid "beep"ing
250 MAILCHECK=30 # mailchecks
251 REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 secondes
252 watch=(notme root) # watch for everyone but me and root
254 # define word separators (for stuff like backward-word, forward-word, backward-kill-word,..)
255 # WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default
257 # WORDCHARS='*?_[]~=&;!#$%^(){}'
258 # WORDCHARS='${WORDCHARS:s@/@}'
260 # only slash should be considered as a word separator:
261 slash-backward-kill-word() {
262 local WORDCHARS="${WORDCHARS:s@/@}"
264 zle backward-kill-word
266 zle -N slash-backward-kill-word
267 bindkey '
\ev' slash-backward-kill-word # press esc-v to delete a word until its last '/' (not the same as ctrl-w!)
271 export ZSHDIR=$HOME/.zsh
272 HISTFILE=$HOME/.zsh_history
273 isgrmlcd && HISTSIZE=500 || HISTSIZE=5000
274 isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history
277 # {{{ display battery status on right side of prompt via running 'BATTERY=1 zsh'
278 if [ -n "$BATTERY" ] ; then
279 if [ -x =acpi ] ; then
280 PERCENT="${(C)${(s| |)$(acpi 2>/dev/null)}[4]}"
281 [ -z "$PERCENT" ] && PERCENT='acpi not present'
282 if [ "${PERCENT%%%}" -lt 20 ] ; then
283 PERCENT="warning: ${PERCENT}%"
290 if [ -f "/usr/share/zsh/$ZSH_VERSION/functions/Prompts/promptinit" ] && autoload promptinit && promptinit 2>/dev/null ; then
291 promptinit # people should be able to use their favourite prompt
293 print 'Notice: no promptinit available :('
295 # precmd() => a function which is executed just before each prompt
296 # precmd () { setopt promptsubst; [[ -o interactive ]] && jobs -l;
297 # run 'NOPRECMD=1 zsh' to disable the precmd + preexec commands
298 is4 && ! [[ -n "$NOPRECMD" ]] && precmd () {
299 if [ -n "$BATTERY" ] ; then
300 # RPROMPT="%(?..:()% ${PERCENT}${SCREENTITLE}"
301 RPROMPT="${PERCENT}${SCREENTITLE}"
303 # RPROMPT="%(?..:()% ${SCREENTITLE}"
304 RPROMPT="${SCREENTITLE}"
306 # adjust title of xterm
307 # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
308 case $TERM in (xterm*|rxvt)
309 print -Pn "\e]0;%n@%m: %~\a"
314 # chpwd () => a function which is executed whenever the directory is changed
316 # preexec() => a function running before every command
317 is4 && ! [[ -n "$NOPRECMD" ]] && preexec () {
318 # set screen window title if running in a screen
319 # get the name of the program currently running and hostname of local machine
320 local HOSTNAME=$(hostname)
321 if [[ "$HOSTNAME" != grml ]] ; then
324 if [[ "$TERM" == screen* ]]; then
325 # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # dont't use hostname
326 local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
327 echo -ne "\ek$CMD\e\\"
329 # set the screen title to "zsh" when sitting at the command prompt:
330 if [[ "$TERM" == screen* ]]; then
331 SCREENTITLE=$'%{\ekzsh\e\\%}'
335 # adjust title of xterm
336 case $TERM in (xterm*|rxvt)
337 print -Pn "\e]0;%n@%m: $1\a"
343 if autoload colors && colors 2>/dev/null ; then
344 BLUE="%{${fg[blue]}%}"
345 RED="%{${fg_bold[red]}%}"
346 GREEN="%{${fg[green]}%}"
347 CYAN="%{${fg[cyan]}%}"
348 WHITE="%{${fg[white]}%}"
349 NO_COLOUR="%{${reset_color}%}"
356 NO_COLOUR="%{
\e[0m%}"
359 EXITCODE="%(?..%?%1v )"
360 PS2='`%_> ' # secondary prompt, printed when the shell needs more information to complete a command.
361 PS3='?# ' # selection prompt used within a select loop.
362 PS4='+%N:%i:%_> ' # the execution trace prompt (setopt xtrace). default: '+%N:%i>'
364 # set variable debian_chroot if running in a chroot with /etc/debian_chroot
365 if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
366 debian_chroot=$(cat /etc/debian_chroot)
369 # don't use colors on dumb terminals (like emacs):
370 if [[ "$TERM" == dumb ]] ; then
371 PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< %# "
373 # only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended prompt
374 # set variable identifying the chroot you work in (used in the prompt below)
375 if [[ -n "$GRMLPROMPT" ]]; then
376 PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D
377 ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# "
379 if (( EUID != 0 )); then
380 PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
382 PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
387 # if we are inside a grml-chroot set a specific prompt theme
388 if [ -n "$GRML_CHROOT" ] ; then
389 PROMPT="%{$fg[red]%}(CHROOT) %{$fg_bold[red]%}%n%{$fg_no_bold[white]%}@%m %40<...<%B%~%b%<< %\# "
393 # {{{ 'hash' some often used directories
394 hash -d deb=/var/cache/apt/archives
395 hash -d doc=/usr/share/doc
396 hash -d linux=/lib/modules/$(command uname -r)/build/
398 hash -d slog=/var/log/syslog
400 hash -d templ=/usr/share/doc/grml-templates
401 hash -d tt=/usr/share/doc/texttools-doc
406 if [ $UID = 0 ] ; then
407 [ -r /etc/grml/screenrc ] && alias screen='/usr/bin/screen -c /etc/grml/screenrc'
408 elif [ -r $HOME/.screenrc ] ; then
409 alias screen="/usr/bin/screen -c $HOME/.screenrc"
411 [ -r /etc/grml/screenrc_grml ] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml'
414 if ls --help 2>/dev/null |grep -- --color= >/dev/null && [ "$TERM" != dumb ] ; then
415 alias ls='ls -b -CF --color=auto' # do we have GNU ls with color-support?
416 alias la='ls -la --color=auto'
417 alias ll='ls -l --color=auto'
418 alias lh='ls -hAl --color=auto'
419 alias l='ls -lF --color=auto'
428 alias cp='nocorrect cp' # no spelling correction on cp
429 alias mkdir='nocorrect mkdir' # no spelling correction on mkdir
430 alias mv='nocorrect mv' # no spelling correction on mv
431 alias rm='nocorrect rm' # no spelling correction on rm
436 alias swspeak="setopt singlelinezle ; unsetopt prompt_cr ; export PS1='%m%# ' ; speechd-up" # set up software synth.
438 # truecrypt; use e.g. via 'truec /dev/ice' /mnt/ice' or 'truec -i'
439 if [ -x /usr/sbin/truecrypt ] ; then
440 alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077" '
443 zsh-help(){print "$bg[white]$fg[black]
444 zsh-help - hints for use of zsh on grml
445 =======================================$reset_color
447 Main configuration of zsh happens in /etc/zsh/zshrc (global)
448 and /etc/skel/.zshrc which is copied to \$HOME/.zshrc once.
449 The files are part of the package grml-etc-core, if you want to
450 use them on a non-grml-system just get the tar.gz from
451 http://grml.org/repos/ or get the files from the mercurial
454 http://hg.grml.org/grml-etc-core/raw-file/tip/etc/skel/.zshrc
455 http://hg.grml.org/grml-etc-core/raw-file/tip/etc/zsh/zshrc
457 If you want to stay in sync with zsh configuration of grml
458 run 'ln -sf /etc/skel/.zshrc \$HOME/.zshrc' and configure
459 your own stuff in \$HOME/.zshrc.local. System wide configuration
460 without touching configuration files of grml can take place
461 in /etc/zsh/zshrc.local.
463 If you want to use the configuration of user grml also when
464 running as user root just run 'zshskel' which will source
465 the file /etc/skel/.zshrc.
467 For information regarding zsh start at http://grml.org/zsh/
469 Take a look at grml's zsh refcard:
470 % xpdf =(zcat /usr/share/doc/grml-docs/zsh/grml-zsh-refcard.pdf.gz)
472 Check out the main zsh refcard:
473 % $BROWSER http://www.bash2zsh.com/zsh_refcard/refcard.pdf
475 And of course visit the zsh-lovers:
478 You can adjust some options through environment variables when
479 invoking zsh without having to edit configuration files.
480 Basically meant for bash users who are not used to the power of
483 \"NOCOR=1 zsh\" => deactivate automatic correction
484 \"NOMENU=1 zsh\" => do not use menu completion (note: use strg-d for completion instead!)
485 \"NOPRECMD=1 zsh\" => disable the precmd + preexec commands (set GNU screen title)
486 \"BATTERY=1 zsh\" => activate battery status (via acpi) on right side of prompt
488 Please report wishes + bugs to the grml-team: http://grml.org/bugs/
489 Enjoy your grml system with the zsh!$reset_color"
493 if [ -r /etc/debian_version ] ; then
494 alias acs='apt-cache search'
495 alias acsh='apt-cache show'
496 alias acp='apt-cache policy'
497 alias adg="$SUDO apt-get dist-upgrade"
498 alias agi="$SUDO apt-get install"
499 alias ag="$SUDO apt-get upgrade"
500 alias au="$SUDO apt-get update"
501 alias dbp='dpkg-buildpackage'
502 alias ge='grep-excuses'
504 isgrmlcd && alias su="sudo su" # change to user root
505 alias tlog="tail -f /var/log/syslog" # take a look at the syslog
506 alias zshskel="source /etc/skel/.zshrc" # source skeleton zshrc
509 # if cdrecord is a symlink (to wodim) or isn't present at all warn:
510 if [ -L /usr/bin/cdrecord -o ! -x =cdrecord ] ; then
511 if [ -x =wodim ] ; then
512 alias cdrecord="echo 'cdrecord is not provided under its original name by Debian anymore.
513 See #377109 in the BTS of Debian for more details.
515 Please use the wodim binary instead' ; return 1"
521 # {{{ Use hard limits, except for a smaller stack and no core dumps
524 limit core 0 # important for a live-cd-system
528 # {{{ completion stuff
530 # Where to look for autoloaded function definitions
531 if [ -d /etc/zsh/completion.d ] ; then
532 local comp=/etc/zsh/completion.d
533 for func in $comp/*(N-.:t); . ${comp}/${func}
536 # called later (via is4 && grmlcomp)
537 # notice: use 'zstyle' for getting current settings
538 # press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
541 zstyle ':completion:*:approximate:' max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )' # allow one error for every three characters typed in approximate completer
542 zstyle ':completion:*:complete:-command-::commands' ignored-patterns '*\~' # don't complete backup files as executables
543 zstyle ':completion:*:correct:*' insert-unambiguous true # start menu completion only if it could find no unambiguous initial string
544 zstyle ':completion:*:corrections' format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}' #
545 zstyle ':completion:*:correct:*' original true #
546 zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} # activate color-completion(!)
547 zstyle ':completion:*:descriptions' format $'%{\e[0;31m%}completing %B%d%b%{\e[0m%}' # format on completion
548 zstyle ':completion:*:*:cd:*:directory-stack' menu yes select # complete 'cd -<tab>' with menu
549 zstyle ':completion:*:expand:*' tag-order all-expansions # insert all expansions for expand completer
550 zstyle ':completion:*:history-words' list false #
551 zstyle ':completion:*:history-words' menu yes # activate menu
552 zstyle ':completion:*:history-words' remove-all-dups yes # ignore duplicate entries
553 zstyle ':completion:*:history-words' stop yes #
554 zstyle ':completion:*:*:linda:*' file-patterns '*.deb' # complete debian packages for command 'linda'
555 zstyle ':completion:*:*:lintian:*' file-patterns '*.deb' # complete debian packages for command 'lintian'
556 zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # match uppercase from lowercase
557 zstyle ':completion:*:matches' group 'yes' # separate matches into groups
558 zstyle ':completion:*' group-name ''
559 if [[ -z "$NOMENU" ]] ; then
560 zstyle ':completion:*' menu select=5 # if there are more than 5 options allow selecting from a menu
562 setopt no_auto_menu # don't use any menus at all
564 zstyle ':completion:*:messages' format '%d' #
565 zstyle ':completion:*:options' auto-description '%d' #
566 zstyle ':completion:*:options' description 'yes' # describe options in full
567 zstyle ':completion:*:processes' command 'ps -au$USER' # on processes completion complete all user processes
568 zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters # offer indexes before parameters in subscripts
569 zstyle ':completion:*' verbose true # provide verbose completion information
570 zstyle ':completion:*:warnings' format $'%{\e[0;31m%}No matches for:%{\e[0m%} %d' # set format for warnings
571 zstyle ':completion:*:*:zcompile:*' ignored-patterns '(*~|*.zwc)' # define files to ignore for zcompile
572 zstyle ':completion:correct:' prompt 'correct to: %e' #
573 zstyle ':completion::(^approximate*):*:functions' ignored-patterns '_*' # Ignore completion functions for commands you don't have:
575 # complete manual by their section
576 zstyle ':completion:*:manuals' separate-sections true
577 zstyle ':completion:*:manuals.*' insert-sections true
578 zstyle ':completion:*:man:*' menu yes select
581 # run rehash on completion so new installed program are found automatically:
583 (( CURRENT == 1 )) && rehash
584 return 1 # Because we didn't really complete anything
586 # some people don't like the automatic correction - so run 'NOCOR=1 zsh' to deactivate it
587 if [[ -n "$NOCOR" ]] ; then
588 zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete
589 setopt nocorrect # do not try to correct the spelling if possible
591 # zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _correct _approximate
592 setopt correct # try to correct the spelling if possible
593 zstyle -e ':completion:*' completer '
594 if [[ $_last_try != "$HISTNO$BUFFER$CURSOR" ]]; then
595 _last_try="$HISTNO$BUFFER$CURSOR"
596 reply=(_complete _match _prefix)
598 if [[ $words[1] = (rm|mv) ]]; then
601 reply=(_oldlist _expand _force_rehash _complete _correct _approximate)
605 # zstyle ':completion:*' completer _complete _correct _approximate
606 # zstyle ':completion:*' expand prefix suffix
608 # automatic rehash? Credits go to Frank Terbeck
609 # function my_accept () {
611 # [[ -z ${BUFFER} ]] && zle accept-line && return
612 # buf=( ${(z)BUFFER} )
613 # [[ -z ${commands[${buf[1]}]} ]] && rehash
617 # bindkey "^M" my_accept
619 # command for process lists, the local web server details and host completion
620 hosts=(`hostname` grml.org)
621 zstyle '*' hosts $hosts
622 zstyle ':completion:*:urls' local 'www' '/var/www/' 'public_html'
625 [ -d $ZSHDIR/cache ] && zstyle ':completion:*' use-cache yes && \
626 zstyle ':completion::complete:*' cache-path $ZSHDIR/cache/
628 # use ~/.ssh/known_hosts for completion [does not work with hashing of new ssh versions anymore]
629 if [ -f "$HOME/.ssh/known_hosts" ] ; then
630 hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*})
631 zstyle ':completion:*:hosts' hosts $hosts
634 # use generic completion system for programs not yet defined:
635 compdef _gnu_generic tail head feh cp mv gpg df stow uname ipacsum fetchipac
637 # see upgrade function in this file
638 compdef _hosts upgrade
644 # people should use 'grml-x'!
646 if [ -e /etc/X11/xorg.conf ] ; then
647 [ -x /usr/bin/startx ] && /usr/bin/startx || /usr/X11R6/bin/startx
649 echo "Please use the script \"grml-x\" for starting the X Window System
650 because there does not exist /etc/X11/xorg.conf yet.
651 If you want to use startx anyway please call \"/usr/bin/startx\"."
657 if [ -e /etc/X11/xorg.conf ] ; then
658 [ -x /usr/bin/xinit ] && /usr/bin/xinit || /usr/X11R6/bin/xinit
660 echo "Please use the script \"grml-x\" for starting the X Window System.
661 because there does not exist /etc/X11/xorg.conf yet.
662 If you want to use xinit anyway please call \"/usr/bin/xinit\"."
667 if [ -x /usr/sbin/915resolution ] ; then
668 alias 855resolution='echo -e "Please use 915resolution as resolution modify tool for Intel graphic chipset."; return -1'
671 alias grml-version='cat /etc/grml_version'
673 if [ -x /usr/sbin/rebuildfstab ] ; then
674 alias grml-rebuildfstab='rebuildfstab -v -r -config'
679 # {{{ now run the functions
681 is4 && isgrml && grmlstuff
686 [ -r /etc/zsh/keephack ] && is4 && source /etc/zsh/keephack
689 # {{{ wonderful idea of using "e" glob qualifier by Peter Stephenson
690 # You use it as follows:
691 # $ NTREF=/reference/file
693 # This lists all the files in the current directory newer than the reference file.
694 # You can also specify the reference file inline; note quotes:
695 # $ ls -l *(e:'nt ~/.zshenv':)
700 [[ $REPLY -nt $NTREF ]]
704 # shell functions {{{
705 setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility
706 freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
707 manzsh() { /usr/bin/man zshall | vim -c "se ft=man| se hlsearch" +/"$1" - ; }
708 # manzsh() { /usr/bin/man zshall | most +/"$1" ; }
709 # manzsh() { man zshall | $MYLESS -p $1 ; }
711 # use "dchange <package-name>" to view Debian's changelog of the package:
713 if [ -r /usr/share/doc/${1}/changelog.Debian.gz ] ; then
714 most /usr/share/doc/${1}/changelog.Debian.gz
716 if [ -r /usr/share/doc/${1}/changelog.gz ] ; then
717 most /usr/share/doc/${1}/changelog.gz
719 echo "No changelog for package $1 found, sorry."
724 _dchange() { _files -W /usr/share/doc -/ }
725 compdef _dchange dchange
727 # use "uchange <package-name>" to view upstream's changelog of the package:
729 if [ -r /usr/share/doc/${1}/changelog.gz ] ; then
730 most /usr/share/doc/${1}/changelog.gz
732 echo "No changelog for package $1 found, sorry."
736 _uchange() { _files -W /usr/share/doc -/ }
737 compdef _uchange uchange
739 # edit alias via zle:
741 [ -z "$1" ] && { echo "Usage: edalias <alias_to_edit>" ; return 1 } || vared aliases'[$1]' ;
743 compdef _aliases edalias
745 # edit function via zle:
747 [ -z "$1" ] && { echo "Usage: edfun <function_to_edit>" ; return 1 } || zed -f "$1" ;
749 compdef _functions edfun
751 # use it e.g. via 'Restart apache2'
752 if [ -d /etc/init.d ] ; then
753 for i in Start Restart Stop Reload ; do
754 eval "$i() { $SUDO /etc/init.d/\$1 ${i:l} \$2 ; }"
756 # now the completion for this:
757 compctl -g "$(echo /etc/init.d/*(:t))" Start Restart Stop Reload
761 # make sure our environment is clean regarding colors
762 for color in BLUE RED GREEN CYAN WHITE ; unset $color
764 # source another config file if present {{{
765 if [ -r /etc/zsh/zshrc.local ]; then
766 source /etc/zsh/zshrc.local
770 # "persistent history" {{{
771 # just write important commands you always need to ~/.important_commands
772 if [ -r ~/.important_commands ] ; then
773 fc -R ~/.important_commands
777 ## END OF FILE #################################################################
778 # vim:foldmethod=marker