Disable persistent dirstack for shells older then 4.2.0
[grml-etc-core.git] / etc / zsh / zshrc
index bcddaf6..0a15eb2 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 Dez 22 19:17:27 CET 2007 [mika]
+# Latest change: Mon Feb 11 18:00:55 CET 2008 [mika]
 ################################################################################
 # This file is sourced only for interactive shells. It
 # should contain commands to set up aliases, functions,
@@ -194,7 +194,7 @@ xcat() {
 # setup files. This should be called at the end of .zshrc.
 xunfunction() {
     local -a funcs
-    funcs=(check_com salias xcat xsource xunfunction zrcautoload)
+    funcs=(salias xcat xsource xunfunction zrcautoload)
 
     for func in $funcs ; do
         [[ -n ${functions[$func]} ]] \
@@ -446,7 +446,9 @@ bindkey '\e[1~' beginning-of-line       # home
 bindkey '\e[4~' end-of-line             # end
 bindkey '\e[A'  up-line-or-search       # cursor up
 bindkey '\e[B'  down-line-or-search     # <ESC>-
-bindkey '^x'    history-beginning-search-backward # alternative ways of searching the shell history
+
+bindkey '^xp'   history-beginning-search-backward
+bindkey '^xP'   history-beginning-search-forward
 # bindkey -s '^L' "|less\n"             # ctrl-L pipes to less
 # bindkey -s '^B' " &\n"                # ctrl-B runs it in the background
 # if terminal type is set to 'rxvt':
@@ -926,15 +928,21 @@ isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history
 
 # dirstack handling {{{
 
+# TODO: the is42 tests are in place, because (u) requires at least 4.2.0
+#       of zsh. We also disable loading potentielly old .zdir files when
+#       starting a pre-4.2.0 zsh.
+#       Implementing a workaround-(u) for older shells is the obvious
+#       solution here, if we want this for all supported shells.
+
 DIRSTACKSIZE=20
-if [[ -f ~/.zdirs ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
+if is42 && [[ -f ~/.zdirs ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
     dirstack=( ${(f)"$(< ~/.zdirs)"} )
     # "cd -" won't work after login by just setting $OLDPWD, so
     [[ -d $dirstack[0] ]] && cd $dirstack[0] && cd $OLDPWD
 fi
 
 chpwd() {
-    builtin print -l ${(u)dirstack} >! ~/.zdirs
+    is42 && builtin print -l ${(u)dirstack} >! ~/.zdirs
 }
 
 # }}}
@@ -1362,7 +1370,11 @@ if [[ -r /etc/debian_version ]] ; then
         fi
     }
 
-    isgrmlcd && alias su="sudo -s"          # get a root shell
+    # get a root shell as normal user in live-cd mode:
+    if isgrmlcd && [[ $UID -ne 0 ]] ; then
+       alias su="sudo su"
+     fi
+
     #a1# Take a look at the syslog: \kbd{\$PAGER /var/log/syslog}
     alias llog="$PAGER /var/log/syslog"     # take a look at the syslog
     #a1# Take a look at the syslog: \kbd{tail -f /var/log/syslog}