rework the dirpersist/dirstack feature
authorJoerg Jaspert <joerg@ganneff.de>
Fri, 22 Mar 2013 13:36:43 +0000 (14:36 +0100)
committerJoerg Jaspert <joerg@ganneff.de>
Fri, 22 Mar 2013 13:36:43 +0000 (14:36 +0100)
.zsh/05_Functions.zsh
.zsh/10_Environment.zsh
.zsh/35_Aliases.zsh
.zsh/zshenv.local.sample

index 12ade7a..4403b10 100644 (file)
@@ -76,15 +76,21 @@ else
 fi
 
 # Taken from oh-my-zsh
-if zstyle -T ':ganneff:config' dirpersiststore && is434; then
-    function dirpersiststore () {
-        dirs -p | perl -e 'foreach (reverse <STDIN>) {chomp;s/([& ])/\\$1/g ;print "if [ -d $_ ]; then pushd -q $_; fi\n"}' >| $zdirstore
-    }
-    add-zsh-hook zshexit dirpersiststore
-
-    function dirpersistrestore () {
-        if [ -f $zdirstore ]; then
-            source $zdirstore
+function dirpersistrestore () {
+    if [ -f ${DIRSTACKFILE} ]; then
+        dirstack=( ${(f)"$(< ${DIRSTACKFILE} )"} )
+        if zstyle -t ':ganneff:config' dirstackhandling dirpersist; then
+            cd -q ${dirstack[-1]}
         fi
-    }
+    fi
+}
+
+function dirpersiststore () {
+    print -l ${(Oau)dirstack} ${PWD} >| ${DIRSTACKFILE}
+}
+
+if is434; then
+    add-zsh-hook zshexit dirpersiststore
+else
+    echo "Sorry, zsh version too old"
 fi
index 1924bef..391f7ab 100644 (file)
@@ -15,10 +15,8 @@ HISTSIZE=$(( $SAVEHIST * 1.10 ))
 
 ## maximum size of the directory stack.
 DIRSTACKSIZE=20
-DIRSTACKFILE=${ZDOTDIR}/var/.zdirs
-if zstyle -T ':ganneff:config' dirpersiststore && is434;then
-    # $zdirstore is the file used to persist the stack
-    zdirstore=${ZDOTDIR}/var/.zdirstore
+DIRSTACKFILE=${ZDOTDIR}/var/.zdirstore
+if zstyle -T ':ganneff:config' dirstackhandling dirpersist dirstack; then
     dirpersistrestore
 fi
 
index e4440ff..fcd5a1c 100644 (file)
@@ -77,7 +77,7 @@ alias zuntrace='typeset -f +t'
 alias gitolite_spi='ssh git@git.spi-inc.org'
 
 # Make popd changes permanent without having to wait for logout
-if zstyle -T ':ganneff:config' dirpersiststore && is434; then
+if zstyle -T ':ganneff:config' dirstackhandling dirpersist dirstack; then
     alias popd="popd;dirpersiststore"
 fi
 
index 2287a97..ed3d8b9 100644 (file)
@@ -55,7 +55,12 @@ lmanpath=(
 # zstyle ':ganneff:config' LINEDRAW true/false
 
 ## Store the dirstack between sessions and restore it
-# zstyle ':ganneff:config' dirpersiststore true
+## There are two ways: The first, dirpersist, will restore it in
+## a way that  puts your new shell into the directory you quit your
+## last. The other way, dirstack, will restore the stack, but not
+## change the directory your shell starts in (so usually it will be ~).
+## Value is dirpersist or dirstack
+zstyle ':ganneff:config' dirstackhandling dirstack
 
 ## Maximum number of events stored in the history file
 ## HISTSIZE is set to 1.10 times the size of this, to have the