/etc/zsh/zshrc: use transient_rprompt only with zsh version 4
[grml-etc-core.git] / etc / zsh / zshrc
index 042ad28..03c27d1 100644 (file)
@@ -3,7 +3,7 @@
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
-# Latest change: Sam Apr 14 11:01:58 CEST 2007 [mika]
+# Latest change: Sam Apr 21 23:57:20 CEST 2007 [mika]
 ################################################################################
 # This file is sourced only for interactive shells. It
 # should contain commands to set up aliases, functions,
 # Search path for the cd comman
 #  cdpath=(.. ~)
 
-# Support our own site-functions
-  [ -d /etc/zsh/site-functions ] && FPATH=/etc/zsh/site-functions:$FPATH
+# completion functions go to /etc/zsh/completion.d
+# function files may be put into /etc/zsh/functions.d, from where they
+# will be automatically autoloaded.
+  [[ -d /etc/zsh/completion.d ]] && fpath+=( /etc/zsh/completion.d )
+  if [[ -d /etc/zsh/functions.d ]] ; then
+    fpath+=( /etc/zsh/functions.d )
+    for func in /etc/zsh/functions.d/[^_]*[^~] ; do
+      autoload -U ${func:t}
+    done
+  fi
 
 # automatically remove duplicates from these arrays
   typeset -U path cdpath fpath manpath
@@ -255,11 +263,13 @@ fi
   autoload history-search-end
 
   # we don't want to quote/espace URLs on our own...
-  if autoload -U url-quote-magic ; then
-     zle -N self-insert url-quote-magic
-  else
-     print 'Notice: no url-quote-magic available :('
-  fi
+  # if autoload -U url-quote-magic ; then
+  #    zle -N self-insert url-quote-magic
+  #    zstyle ':url-quote-magic:*' url-metas '*?[]^()~#{}='
+  # else
+  #    print 'Notice: no url-quote-magic available :('
+  # fi
+  alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magic'
 
   alias run-help >&/dev/null && unalias run-help
   autoload run-help # use via 'esc-h'
@@ -433,17 +443,22 @@ fi
 
   # precmd () { setopt promptsubst; [[ -o interactive ]] && jobs -l;
 
+  # make sure to use right prompt only when not running a command
+  is4 && setopt transient_rprompt
+
   is4 && [[ -z $NOPRECMD ]] && precmd () {
       [[ -n $NOPRECMD ]] && return 0
+      # allow manual overwriting of RPROMPT
+      [[ -n $RPROMPT ]] && echo -n $'\ekzsh\e\\' && return 0
       # just use DONTSETRPROMPT=1 to be able to overwrite RPROMPT
-      if [[ -z ${DONTSETRPROMPT} ]] ; then
-        if [ -n "$BATTERY" ] ; then
-          # RPROMPT="%(?..:()% ${PERCENT}${SCREENTITLE}"
-          RPROMPT="${PERCENT}${SCREENTITLE}"
-        else
-          # RPROMPT="%(?..:()% ${SCREENTITLE}"
-          RPROMPT="${SCREENTITLE}"
-        fi
+      if [[ -z $DONTSETRPROMPT ]] ; then
+         if [[ -n $BATTERY ]] ; then
+            RPROMPT="%(?..:()% ${PERCENT}${SCREENTITLE}"
+            # RPROMPT="${PERCENT}${SCREENTITLE}"
+         else
+            RPROMPT="%(?..:()% ${SCREENTITLE}"
+            # RPROMPT="${SCREENTITLE}"
+         fi
       fi
       # adjust title of xterm
       # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
@@ -466,15 +481,15 @@ fi
   # get the name of the program currently running and hostname of local machine
   # set screen window title if running in a screen
       if [[ "$TERM" == screen* ]]; then
-          # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]}       # dont't use hostname
-          local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
-          echo -ne "\ek$CMD\e\\"
+         # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]}       # dont't use hostname
+         local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
+         echo -ne "\ek$CMD\e\\"
       fi
   # set the screen title to "zsh" when sitting at the command prompt:
       if [[ "$TERM" == screen* ]]; then
-           SCREENTITLE=$'%{\ekzsh\e\\%}'
+         SCREENTITLE=$'%{\ekzsh\e\\%}'
       else
-           SCREENTITLE=''
+         SCREENTITLE=''
       fi
   # adjust title of xterm
       case $TERM in (xterm*|rxvt)
@@ -512,11 +527,11 @@ fi
 
   # don't use colors on dumb terminals (like emacs):
   if [[ "$TERM" == dumb ]] ; then
-    PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< %# "
+     PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< %# "
   else
     # only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended prompt
     # set variable identifying the chroot you work in (used in the prompt below)
-    if [[ -n "$GRMLPROMPT" ]]; then
+    if [[ -n $GRMLPROMPT ]]; then
       PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D
 ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# "
     else
@@ -762,12 +777,6 @@ Run "grml-tips ssl-certificate" if you need further instructions.
 
 # {{{ completion stuff
 
-# Where to look for autoloaded function definitions
-  if [ -d /etc/zsh/completion.d ] ; then
-    local comp=/etc/zsh/completion.d
-    for func in $comp/*(N-.:t); . ${comp}/${func}
-  fi
-
 # called later (via is4 && grmlcomp)
 # notice: use 'zstyle' for getting current settings
 #         press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
@@ -1020,7 +1029,7 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"."
     }
     _dchange() { _files -W /usr/share/doc -/ }
     compdef _dchange dchange
-  
+
   # use "uchange <package-name>" to view upstream's changelog of the package:
     uchange() {
       if [ -r /usr/share/doc/${1}/changelog.gz ] ; then