Commit c98883f5 authored by Robby Russell's avatar Robby Russell
Browse files

Merge pull request #2631 from AntoineD/master

Fix dirpersist plugin
parents c137c7bf ef343eef
#!/bin/zsh # Save dirstack history to .zdirs
# # adapted from:
# Make the dirstack more persistant # github.com/grml/grml-etc-core/blob/master/etc/zsh/zshrc#L1547
#
# Add dirpersist to $plugins in ~/.zshrc to load
#
# $zdirstore is the file used to persist the stack DIRSTACKSIZE=${DIRSTACKSIZE:-20}
zdirstore=~/.zdirstore dirstack_file=${dirstack_file:-${HOME}/.zdirs}
dirpersistinstall () { if [[ -f ${dirstack_file} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
if grep 'dirpersiststore' ~/.zlogout > /dev/null; then dirstack=( ${(f)"$(< $dirstack_file)"} )
else # "cd -" won't work after login by just setting $OLDPWD, so
if read -q \?"Would you like to set up your .zlogout file for use with dirspersist? (y/n) "; then [[ -d $dirstack[1] ]] && cd $dirstack[1] && cd $OLDPWD
echo "# Store dirs stack\n# See $ZSH/plugins/dirspersist.plugin.zsh\ndirpersiststore" >> ~/.zlogout fi
else
echo "If you don't want this message to appear, remove dirspersist from \$plugins"
fi
fi
}
dirpersiststore () {
dirs -p | perl -e 'foreach (reverse <STDIN>) {chomp;s/([& ])/\\$1/g ;print "if [ -d $_ ]; then pushd -q $_; fi\n"}' > $zdirstore
}
dirpersistrestore () { chpwd() {
if [ -f $zdirstore ]; then if (( $DIRSTACKSIZE <= 0 )) || [[ -z $dirstack_file ]]; then return; fi
source $zdirstore local -ax my_stack
fi my_stack=( ${PWD} ${dirstack} )
builtin print -l ${(u)my_stack} >! ${dirstack_file}
} }
DIRSTACKSIZE=10
setopt autopushd pushdminus pushdsilent pushdtohome pushdignoredups
dirpersistinstall
dirpersistrestore
# Make popd changes permanent without having to wait for logout
alias popd="popd;dirpersiststore"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment