summaryrefslogtreecommitdiff
path: root/oh-my-zsh/plugins/dirpersist/dirpersist.plugin.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'oh-my-zsh/plugins/dirpersist/dirpersist.plugin.zsh')
-rw-r--r--oh-my-zsh/plugins/dirpersist/dirpersist.plugin.zsh21
1 files changed, 21 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/dirpersist/dirpersist.plugin.zsh b/oh-my-zsh/plugins/dirpersist/dirpersist.plugin.zsh
new file mode 100644
index 0000000..daadc38
--- /dev/null
+++ b/oh-my-zsh/plugins/dirpersist/dirpersist.plugin.zsh
@@ -0,0 +1,21 @@
+# Save dirstack history to .zdirs
+# adapted from:
+# github.com/grml/grml-etc-core/blob/master/etc/zsh/zshrc#L1547
+
+DIRSTACKSIZE=${DIRSTACKSIZE:-20}
+dirstack_file=${dirstack_file:-${HOME}/.zdirs}
+
+if [[ -f ${dirstack_file} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
+ dirstack=( ${(f)"$(< $dirstack_file)"} )
+ # "cd -" won't work after login by just setting $OLDPWD, so
+ [[ -d $dirstack[1] ]] && cd $dirstack[1] && cd $OLDPWD
+fi
+
+autoload -U add-zsh-hook
+add-zsh-hook chpwd chpwd_dirpersist
+chpwd_dirpersist() {
+ if (( $DIRSTACKSIZE <= 0 )) || [[ -z $dirstack_file ]]; then return; fi
+ local -ax my_stack
+ my_stack=( ${PWD} ${dirstack} )
+ builtin print -l ${(u)my_stack} >! ${dirstack_file}
+}