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: Sam Okt 21 16:20:30 CEST 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)
18 if [[ $ZSH_VERSION == 4.* ]]; then
27 if [[ $ZSH_VERSION == 4.<2->* ]]; then
36 if [ -f /etc/grml_version ] ; then
44 if [ -f /etc/grml_cd ] ; then
51 # check for user, if not running as root set $SUDO to sudo
52 (( EUID != 0 )) && SUDO='sudo' || SUDO=''
54 # change directory to home on first invocation of zsh
55 # important for rungetty -> autologin
56 # Thanks go to Bart Schaefer!
57 isgrml && checkhome() {
58 if [[ -z "$ALREADY_DID_CD_HOME" ]]; then
59 export ALREADY_DID_CD_HOME=$HOME
65 # {{{ set some variables
66 [[ -z "$EDITOR" ]] && export EDITOR='vim'
67 [[ -z "$SHELL" ]] && export SHELL='/bin/zsh'
68 [[ -z "$MAIL" ]] && export MAIL="/var/mail/$USER"
69 [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
70 [[ -x /usr/bin/dircolors ]] && eval `dircolors -b`
72 # Search path for the cd comman
75 # Support our own site-functions
76 [ -d /etc/zsh/site-functions ] && export FPATH=/etc/zsh/site-functions:$FPATH
78 # automatically remove duplicates from these arrays
79 typeset -U path cdpath fpath manpath
83 if [[ "$TERM" != emacs ]]; then
84 [[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char
85 [[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
86 [[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
87 [[ -z "$terminfo[kdch1]" ]] || bindkey -M vicmd "$terminfo[kdch1]" vi-delete-char
88 [[ -z "$terminfo[khome]" ]] || bindkey -M vicmd "$terminfo[khome]" vi-beginning-of-line
89 [[ -z "$terminfo[kend]" ]] || bindkey -M vicmd "$terminfo[kend]" vi-end-of-line
90 [[ -z "$terminfo[cuu1]" ]] || bindkey -M viins "$terminfo[cuu1]" vi-up-line-or-history
91 [[ -z "$terminfo[cuf1]" ]] || bindkey -M viins "$terminfo[cuf1]" vi-forward-char
92 [[ -z "$terminfo[kcuu1]" ]] || bindkey -M viins "$terminfo[kcuu1]" vi-up-line-or-history
93 [[ -z "$terminfo[kcud1]" ]] || bindkey -M viins "$terminfo[kcud1]" vi-down-line-or-history
94 [[ -z "$terminfo[kcuf1]" ]] || bindkey -M viins "$terminfo[kcuf1]" vi-forward-char
95 [[ -z "$terminfo[kcub1]" ]] || bindkey -M viins "$terminfo[kcub1]" vi-backward-char
97 [[ "$terminfo[kcuu1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcuu1]/O/[}" vi-up-line-or-history
98 [[ "$terminfo[kcud1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcud1]/O/[}" vi-down-line-or-history
99 [[ "$terminfo[kcuf1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcuf1]/O/[}" vi-forward-char
100 [[ "$terminfo[kcub1]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kcub1]/O/[}" vi-backward-char
101 [[ "$terminfo[khome]" == "
\eO"* ]] && bindkey -M viins "${terminfo[khome]/O/[}" beginning-of-line
102 [[ "$terminfo[kend]" == "
\eO"* ]] && bindkey -M viins "${terminfo[kend]/O/[}" end-of-line
103 [[ "$terminfo[khome]" == "
\eO"* ]] && bindkey -M emacs "${terminfo[khome]/O/[}" beginning-of-line
104 [[ "$terminfo[kend]" == "
\eO"* ]] && bindkey -M emacs "${terminfo[kend]/O/[}" end-of-line
107 ## keybindings (run 'bindkeys' for details, more details via man zshzle)
108 # use emacs style per default
113 #if [[ "$TERM" == screen ]]; then
114 bindkey '\e[1~' beginning-of-line # home
115 bindkey '\e[4~' end-of-line # end
116 bindkey "^[[A" up-line-or-search # cursor up
117 bindkey "^[[B" down-line-or-search # <ESC>-
118 bindkey '^x' history-beginning-search-backward # alternative ways of searching the shell history
119 # bindkey -s '^L' "|less\n" # ctrl-L pipes to less
120 # bindkey -s '^B' " &\n" # ctrl-B runs it in the background
121 # if terminal type is set to 'rxvt':
122 bindkey '\e[7~' beginning-of-line # home
123 bindkey '\e[8~' end-of-line # end
126 # bindkey '\eq' push-line-or-edit
130 autoload -U zmv # who needs mmv or rename?
131 autoload history-search-end
133 # we don't want to quote/espace URLs on our own...
134 # avoid 'url-quote-magic: function definition file not found' on some older boxes
135 if [ -f "/usr/share/zsh/$ZSH_VERSION/functions/Zle/url-quote-magic" ] ; then
136 autoload -U url-quote-magic && zle -N self-insert url-quote-magic
138 print 'Notice: no url-quote-magic available :('
141 alias run-help >&/dev/null && unalias run-help
142 autoload run-help # use via 'esc-h'
145 is42 && if autoload -U compinit && [ -f "/usr/share/zsh/$ZSH_VERSION/functions/Completion/compinit" ] ; then
148 print 'Notice: no compinit available :('
152 is4 && autoload -U zed # use ZLE editor to edit a file or function
154 is4 && zmodload -i zsh/complist
155 is4 && zmodload -i zsh/deltochar
156 is4 && zmodload -i zsh/mathfunc
157 # autoload zsh modules when they are referenced
158 is4 && zmodload -a zsh/stat stat
159 is4 && zmodload -a zsh/zpty zpty
160 is4 && zmodload -a zsh/zprof zprof
161 is4 && zmodload -ap zsh/mapfile mapfile
163 is4 && autoload -U insert-files && \
164 zle -N insert-files && \
165 bindkey "^Xf" insert-files # C-x-f
167 bindkey ' ' magic-space # also do history expansion on space
168 bindkey '\ei' menu-complete # menu completion via esc-i
170 # press esc-e for editing command line in $EDITOR or $VISUAL
171 is4 && autoload -U edit-command-line && \
172 zle -N edit-command-line && \
173 bindkey '\ee' edit-command-line
175 # press "ctrl-e d" to insert the actual date in the form yyyy-mm-dd
176 _bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; }
177 bindkey '\C-ed' _bkdate
180 # press esc-m for inserting last typed word again (thanks to caphuso!)
181 insert-last-typed-word() { zle insert-last-word -- 0 -1 }; \
182 zle -N insert-last-typed-word; bindkey "\em" insert-last-typed-word
184 # set command prediction from history, see 'man 1 zshcontrib'
185 # is4 && autoload -U predict-on && \
186 # zle -N predict-on && \
187 # zle -N predict-off && \
188 # bindkey "^X^Z" predict-on && \
189 # bindkey "^Z" predict-off
191 # put job into foreground via ctrl-z:
192 bindkey -s '^z' "fg\n"
194 # press ctrl-q to quote line:
196 # zle beginning-of-line
198 # # RBUFFER="'$RBUFFER'"
199 # RBUFFER=${(q)RBUFFER}
202 # zle -N mquote && bindkey '^q' mquote
204 # run command line as user root via sudo:
205 _sudo-command-line() {
206 [[ $BUFFER != sudo\ * ]] && LBUFFER="sudo $LBUFFER"
208 zle -N sudo-command-line _sudo-command-line
209 bindkey "^Os" sudo-command-line
212 # {{{ set some important options
216 setopt append_history # append history list to the history file (important for multiple parallel zsh sessions!)
217 is4 && setopt SHARE_HISTORY # import new commands from the history file also in other zsh-session
218 setopt extended_history # save each command's beginning timestamp and the duration to the history file
219 is4 && setopt histignorealldups # If a new command line being added to the history
220 # list duplicates an older one, the older command is removed from the list
221 setopt histignorespace # remove command lines from the history list when
222 # the first character on the line is a space
223 # setopt histallowclobber # add `|' to output redirections in the history
224 # setopt NO_clobber # warning if file exists ('cat /dev/null > ~/.zshrc')
225 setopt auto_cd # if a command is issued that can't be executed as a normal command,
226 # and the command is the name of a directory, perform the cd command to that directory
227 setopt extended_glob # in order to use #, ~ and ^ for filename generation
228 # grep word *~(*.gz|*.bz|*.bz2|*.zip|*.Z) ->
229 # -> searches for word not in compressed files
230 # don't forget to quote '^', '~' and '#'!
231 setopt notify # report the status of backgrounds jobs immediately
232 setopt hash_list_all # Whenever a command completion is attempted, make sure \
233 # the entire command path is hashed first.
234 setopt completeinword # not just at the end
235 # setopt nocheckjobs # don't warn me about bg processes when exiting
236 setopt nohup # and don't kill them, either
237 # setopt printexitvalue # alert me if something failed
238 # setopt dvorak # with spelling correction, assume dvorak kb
239 setopt auto_pushd # make cd push the old directory onto the directory stack.
240 setopt nonomatch # try to avoid the 'zsh: no matches found...'
241 setopt nobeep # avoid "beep"ing
243 MAILCHECK=30 # mailchecks
244 REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 secondes
245 watch=(notme root) # watch for everyone but me and root
247 # define word separators (for stuff like backward-word, forward-word, backward-kill-word,..)
248 # WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default
250 # WORDCHARS='*?_[]~=&;!#$%^(){}'
251 # WORDCHARS='${WORDCHARS:s@/@}'
253 # only slash should be considered as a word separator:
254 slash-backward-kill-word() {
255 local WORDCHARS="${WORDCHARS:s@/@}"
257 zle backward-kill-word
259 zle -N slash-backward-kill-word
260 bindkey '
\ev' slash-backward-kill-word # press esc-v to delete a word until its last '/' (not the same as ctrl-w!)
264 export ZSHDIR=$HOME/.zsh
265 HISTFILE=$HOME/.zsh_history
266 isgrmlcd && HISTSIZE=500 || HISTSIZE=5000
267 isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history
270 # {{{ display battery status on right side of prompt via running 'BATTERY=1 zsh'
271 if [ -n "$BATTERY" ] ; then
272 if [ -x =acpi ] ; then
273 PERCENT="${(C)${(s| |)$(acpi 2>/dev/null)}[4]}"
274 [ -z "$PERCENT" ] && PERCENT='acpi not present'
275 if [ "${PERCENT%%%}" -lt 20 ] ; then
276 PERCENT="warning: ${PERCENT}%"
283 if [ -f "/usr/share/zsh/$ZSH_VERSION/functions/Prompts/promptinit" ] ; then
284 autoload promptinit && promptinit # people should be able to use their favourite prompt
286 print 'Notice: no prompiinit available :('
288 # precmd() => a function which is executed just before each prompt
289 # precmd () { setopt promptsubst; [[ -o interactive ]] && jobs -l;
290 # run 'NOPRECMD=1 zsh' to disable the precmd + preexec commands
291 is4 && ! [[ -n "$NOPRECMD" ]] && precmd () {
292 if [ -n "$BATTERY" ] ; then
293 RPROMPT="%(?..:()% ${PERCENT}${SCREENTITLE}"
295 RPROMPT="%(?..:()% ${SCREENTITLE}"
297 # adjust title of xterm
298 # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
299 case $TERM in (xterm*|rxvt)
300 print -Pn "\e]0;%n@%m: %~\a"
305 # chpwd () => a function which is executed whenever the directory is changed
307 # preexec() => a function running before every command
308 is4 && ! [[ -n "$NOPRECMD" ]] && preexec () {
309 # set screen window title if running in a screen
310 # get the name of the program currently running and hostname of local machine
311 local HOSTNAME=$(hostname)
312 if [[ "$HOSTNAME" != grml ]] ; then
315 if [[ "$TERM" == screen* ]]; then
316 # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # dont't use hostname
317 local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
318 echo -ne "\ek$CMD\e\\"
320 # set the screen title to "zsh" when sitting at the command prompt:
321 if [[ "$TERM" == screen* ]]; then
322 SCREENTITLE=$'%{\ekzsh\e\\%}'
326 # adjust title of xterm
327 case $TERM in (xterm*|rxvt)
328 print -Pn "\e]0;%n@%m: $1\a"
333 EXITCODE="%(?..%?%1v )"
334 local BLUE="%{
\e[1;34m%}"
335 local RED="%{
\e[1;31m%}"
336 local GREEN="%{
\e[1;32m%}"
337 local CYAN="%{
\e[1;36m%}"
338 local WHITE="%{
\e[1;37m%}"
339 local NO_COLOUR="%{
\e[0m%}"
340 PS2='`%_> ' # secondary prompt, printed when the shell needs more information to complete a command.
341 PS3='?# ' # selection prompt used within a select loop.
342 PS4='+%N:%i:%_> ' # the execution trace prompt (setopt xtrace). default: '+%N:%i>'
344 # set variable debian_chroot if running in a chroot with /etc/debian_chroot
345 if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
346 debian_chroot=$(cat /etc/debian_chroot)
349 # don't use colors on dumb terminals (like emacs):
350 if [[ "$TERM" == dumb ]] ; then
351 PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< %# "
353 # only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended prompt
354 # set variable identifying the chroot you work in (used in the prompt below)
355 if [[ -n "$GRMLPROMPT" ]]; then
356 PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D
357 ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# "
359 if (( EUID != 0 )); then
360 PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
362 PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# " # primary prompt string
367 # if we are inside a grml-chroot set a specific prompt theme
368 if [ -n "$GRML_CHROOT" ] ; then
369 PROMPT="%{$fg[red]%}(CHROOT) %{$fg_bold[red]%}%n%{$fg_no_bold[white]%}@%m %40<...<%B%~%b%<< %\# "
373 # {{{ 'hash' some often used directories
374 hash -d deb=/var/cache/apt/archives
375 hash -d doc=/usr/share/doc
376 hash -d linux=/lib/modules/$(command uname -r)/build/
378 hash -d slog=/var/log/syslog
380 hash -d templ=/usr/share/doc/grml-templates
381 hash -d tt=/usr/share/doc/texttools-doc
386 if [ $UID = 0 ] ; then
387 [ -r /etc/grml/screenrc ] && alias screen='/usr/bin/screen -c /etc/grml/screenrc'
388 elif [ -r $HOME/.screenrc ] ; then
389 alias screen="/usr/bin/screen -c $HOME/.screenrc"
391 [ -r /etc/grml/screenrc_grml ] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml'
394 if ls --help 2>/dev/null |grep -- --color= >/dev/null && [ "$TERM" != dumb ] ; then
395 alias ls='ls -b -CF --color=auto' # do we have GNU ls with color-support?
396 alias la='ls -la --color=auto'
397 alias ll='ls -l --color=auto'
398 alias lh='ls -hAl --color=auto'
399 alias l='ls -lF --color=auto'
408 alias cp='nocorrect cp' # no spelling correction on cp
409 alias mkdir='nocorrect mkdir' # no spelling correction on mkdir
410 alias mv='nocorrect mv' # no spelling correction on mv
411 alias rm='nocorrect rm' # no spelling correction on rm
416 alias swspeak="setopt singlelinezle ; unsetopt prompt_cr ; export PS1='%m%# ' ; speechd-up" # set up software synth.
418 # truecrypt; use e.g. via 'truec /dev/ice' /mnt/ice' or 'truec -i'
419 if [ -x /usr/sbin/truecrypt ] ; then
420 alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077" '
423 zsh-help(){print "$bg[white]$fg[black]
424 zsh-help - hints for use of zsh on grml
425 =======================================$reset_color
427 Main configuration of zsh happens in /etc/zsh/zshrc (global)
428 and /etc/skel/.zshrc which is copied to \$HOME/.zshrc once.
429 The files are part of the package grml-etc, if you want to
430 use them on a non-grml-system just get the tar.gz from
431 http://grml.org/repos/
433 If you want to stay in sync with zsh configuration of grml
434 run 'ln -sf /etc/skel/.zshrc \$HOME/.zshrc' and configure
435 your own stuff in \$HOME/.zshrc.local. System wide configuration
436 without touching configuration files of grml can take place
437 in /etc/zsh/zshrc.local.
439 If you want to use the configuration of user grml also when
440 running as user root just run 'zshskel' which will source
441 the file /etc/skel/.zshrc.
443 For information regarding zsh start at http://grml.org/zsh/
445 Take a look at grml's zsh refcard:
446 % xpdf =(zcat /usr/share/doc/grml-docs/zsh/grml-zsh-refcard.pdf.gz)
448 Check out the main zsh refcard:
449 % $BROWSER http://www.bash2zsh.com/zsh_refcard/refcard.pdf
451 And of course visit the zsh-lovers:
454 You can adjust some options through environment variables when
455 invoking zsh without having to edit configuration files.
456 Basically meant for bash users who are not used to the power of
459 \"NOCOR=1 zsh\" => deactivate automatic correction
460 \"NOMENU=1 zsh\" => do not use menu completion (note: use strg-d for completion instead!)
461 \"NOPRECMD=1 zsh\" => disable the precmd + preexec commands (set GNU screen title)
462 \"BATTERY=1 zsh\" => activate battery status (via acpi) on right side of prompt
464 Please report wishes + bugs to the grml-team: http://grml.org/bugs/
465 Enjoy your grml system with the zsh!$reset_color"
469 if [ -r /etc/debian_version ] ; then
470 alias acs="apt-cache search"
471 alias acsh="apt-cache show"
472 alias adg="$SUDO apt-get dist-upgrade"
473 alias agi="$SUDO apt-get install"
474 alias ag="$SUDO apt-get upgrade"
475 alias au="$SUDO apt-get update"
476 alias dbp="dpkg-buildpackage"
477 alias ge="grep-excuses"
479 isgrmlcd && alias su="sudo su" # change to user root
480 alias tlog="tail -f /var/log/syslog" # take a look at the syslog
481 alias zshskel="source /etc/skel/.zshrc" # source skeleton zshrc
484 # if cdrecord is a symlink (to wodim) or isn't present at all warn:
485 if [ -L /usr/bin/cdrecord -o ! -x =cdrecord ] ; then
486 if [ -x =wodim ] ; then
487 alias cdrecord="echo 'cdrecord is not provided under its original name by Debian anymore.
488 See #377109 in the BTS of Debian for more details.
490 Please use the wodim binary instead' ; return 1"
496 # {{{ Use hard limits, except for a smaller stack and no core dumps
499 limit core 0 # important for a live-cd-system
503 # {{{ completion stuff
505 # Where to look for autoloaded function definitions
506 if [ -d /etc/zsh/completion.d ] ; then
507 local comp=/etc/zsh/completion.d
508 for func in $comp/*(N-.:t); . ${comp}/${func}
511 # called later (via is4 && grmlcomp)
512 # notice: use 'zstyle' for getting current settings
513 # press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
516 zstyle ':completion:*:approximate:' max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )' # allow one error for every three characters typed in approximate completer
517 zstyle ':completion:*:complete:-command-::commands' ignored-patterns '*\~' # don't complete backup files as executables
518 zstyle ':completion:*:correct:*' insert-unambiguous true # start menu completion only if it could find no unambiguous initial string
519 zstyle ':completion:*:corrections' format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}' #
520 zstyle ':completion:*:correct:*' original true #
521 zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} # activate color-completion(!)
522 zstyle ':completion:*:descriptions' format $'%{\e[0;31m%}completing %B%d%b%{\e[0m%}' # format on completion
523 zstyle ':completion:*:*:cd:*:directory-stack' menu yes select # complete 'cd -<tab>' with menu
524 zstyle ':completion:*:expand:*' tag-order all-expansions # insert all expansions for expand completer
525 zstyle ':completion:*:history-words' list false #
526 zstyle ':completion:*:history-words' menu yes # activate menu
527 zstyle ':completion:*:history-words' remove-all-dups yes # ignore duplicate entries
528 zstyle ':completion:*:history-words' stop yes #
529 zstyle ':completion:*:*:linda:*' file-patterns '*.deb' # complete debian packages for command 'linda'
530 zstyle ':completion:*:*:lintian:*' file-patterns '*.deb' # complete debian packages for command 'lintian'
531 zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # match uppercase from lowercase
532 zstyle ':completion:*:matches' group 'yes' # separate matches into groups
533 if [[ -z "$NOMENU" ]] ; then
534 zstyle ':completion:*' menu select=5 # if there are more than 5 options allow selecting from a menu
536 setopt no_auto_menu # don't use any menus at all
538 zstyle ':completion:*:messages' format '%d' #
539 zstyle ':completion:*:options' auto-description '%d' #
540 zstyle ':completion:*:options' description 'yes' # describe options in full
541 zstyle ':completion:*:processes' command 'ps -au$USER' # on processes completion complete all user processes
542 zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters # offer indexes before parameters in subscripts
543 zstyle ':completion:*' verbose true # provide verbose completion information
544 zstyle ':completion:*:warnings' format $'%{\e[0;31m%}No matches for:%{\e[0m%} %d' # set format for warnings
545 zstyle ':completion:*:*:zcompile:*' ignored-patterns '(*~|*.zwc)' # define files to ignore for zcompile
546 zstyle ':completion:correct:' prompt 'correct to: %e' #
547 zstyle ':completion::(^approximate*):*:functions' ignored-patterns '_*' # Ignore completion functions for commands you don't have:
549 # complete manual by their section
550 zstyle ':completion:*:manuals' separate-sections true
551 zstyle ':completion:*:man:*' menu yes select
554 # run rehash on completion so new installed program are found automatically:
556 (( CURRENT == 1 )) && rehash
557 return 1 # Because we didn't really complete anything
559 # some people don't like the automatic correction - so run 'NOCOR=1 zsh' to deactivate it
560 if [[ -n "$NOCOR" ]] ; then
561 zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete
562 setopt nocorrect # do not try to correct the spelling if possible
564 # zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _correct _approximate
565 setopt correct # try to correct the spelling if possible
566 zstyle -e ':completion:*' completer '
567 if [[ $_last_try != "$HISTNO$BUFFER$CURSOR" ]]; then
568 _last_try="$HISTNO$BUFFER$CURSOR"
569 reply=(_complete _match _prefix)
571 if [[ $words[1] = (rm|mv) ]]; then
574 reply=(_oldlist _expand _force_rehash _complete _correct _approximate)
578 # zstyle ':completion:*' completer _complete _correct _approximate
579 # zstyle ':completion:*' expand prefix suffix
581 # automatic rehash? Credits go to Frank Terbeck
582 # function my_accept () {
584 # [[ -z ${BUFFER} ]] && zle accept-line && return
585 # buf=( ${(z)BUFFER} )
586 # [[ -z ${commands[${buf[1]}]} ]] && rehash
590 # bindkey "^M" my_accept
592 # command for process lists, the local web server details and host completion
593 hosts=(`hostname` grml.org)
594 zstyle '*' hosts $hosts
595 zstyle ':completion:*:urls' local 'www' '/var/www/' 'public_html'
598 [ -d $ZSHDIR/cache ] && zstyle ':completion:*' use-cache yes && \
599 zstyle ':completion::complete:*' cache-path $ZSHDIR/cache/
601 # use ~/.ssh/known_hosts for completion [does not work with hashing of new ssh versions anymore]
602 if [ -f "$HOME/.ssh/known_hosts" ] ; then
603 hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*})
604 zstyle ':completion:*:hosts' hosts $hosts
607 # use generic completion system for programs not yet defined:
608 compdef _gnu_generic tail head feh cp mv gpg df stow uname ipacsum fetchipac
610 # see upgrade function in this file
611 compdef _hosts upgrade
617 # people should use 'grml-x'!
619 if [ -e /etc/X11/xorg.conf ] ; then
620 [ -x /usr/bin/startx ] && /usr/bin/startx || /usr/X11R6/bin/startx
622 echo "Please use the script \"grml-x\" for starting the X Window System
623 because there does not exist /etc/X11/xorg.conf yet.
624 If you want to use startx anyway please call \"/usr/bin/startx\"."
630 if [ -e /etc/X11/xorg.conf ] ; then
631 [ -x /usr/bin/xinit ] && /usr/bin/xinit || /usr/X11R6/bin/xinit
633 echo "Please use the script \"grml-x\" for starting the X Window System.
634 because there does not exist /etc/X11/xorg.conf yet.
635 If you want to use xinit anyway please call \"/usr/bin/xinit\"."
640 if [ -x /usr/sbin/915resolution ] ; then
641 alias 855resolution='echo -e "Please use 915resolution as resolution modify tool for Intel graphic chipset."; return -1'
644 alias grml-version='cat /etc/grml_version'
646 if [ -x /usr/sbin/rebuildfstab ] ; then
647 local fstabuser=$(getent passwd 1000 | cut -d: -f1)
648 alias grml-rebuildfstab="rebuildfstab -v -r -u $fstabuser -g $fstabuser"
653 # {{{ now run the functions
655 is4 && isgrml && grmlstuff
660 [ -r /etc/zsh/keephack ] && is4 && source /etc/zsh/keephack
663 # {{{ wonderful idea of using "e" glob qualifier by Peter Stephenson
664 # You use it as follows:
665 # $ NTREF=/reference/file
667 # This lists all the files in the current directory newer than the reference file.
668 # You can also specify the reference file inline; note quotes:
669 # $ ls -l *(e:'nt ~/.zshenv':)
674 [[ $REPLY -nt $NTREF ]]
678 # shell functions {{{
679 setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility
680 freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
681 manzsh() { /usr/bin/man zshall | vim -c "se ft=man| se hlsearch" +/"$1" - ; }
682 # manzsh() { man zshall | $MYLESS -p $1 ; }
683 # manzsh() { /usr/bin/man zshall | most +/"$1" ; }
685 # use "dchange <package-name>" to view Debian's changelog of the package:
687 if [ -r /usr/share/doc/${1}/changelog.Debian.gz ] ; then
688 most /usr/share/doc/${1}/changelog.Debian.gz
690 if [ -r /usr/share/doc/${1}/changelog.gz ] ; then
691 most /usr/share/doc/${1}/changelog.gz
693 echo "No changelog for package $1 found, sorry."
698 _dchange() { _files -W /usr/share/doc -/ }
699 compdef _dchange dchange
701 # use "uchange <package-name>" to view upstream's changelog of the package:
703 if [ -r /usr/share/doc/${1}/changelog.gz ] ; then
704 most /usr/share/doc/${1}/changelog.gz
706 echo "No changelog for package $1 found, sorry."
709 _uchange() { _files -W /usr/share/doc -/ }
710 compdef _uchange uchange
712 # edit alias via zle:
714 [ -z "$1" ] && { echo "Usage: edalias <alias_to_edit>" ; return 1 } || vared aliases'[$1]' ;
716 compdef _aliases edalias
718 # edit function via zle:
720 [ -z "$1" ] && { echo "Usage: edfun <function_to_edit>" ; return 1 } || zed -f "$1" ;
722 compdef _functions edfun
724 # use it e.g. via 'Restart apache2'
725 if [ -d /etc/init.d ] ; then
726 for i in Start Restart Stop Reload ; do
727 eval "$i() { $SUDO /etc/init.d/\$1 ${i:l} $2 ; }"
729 # now the completion for this:
730 compctl -g "$(echo /etc/init.d/*(:t))" Start Restart Stop Reload
734 # source another config file if present {{{
735 if [ -r /etc/zsh/zshrc.local ]; then
736 source /etc/zsh/zshrc.local
740 # "persistent history" {{{
741 # just write important commands you always need to ~/.important_commands
742 if [ -r ~/.important_commands ] ; then
743 fc -R ~/.important_commands
747 ## END OF FILE #################################################################
748 # vim:foldmethod=marker