This commit triggers precmd and chpwd hook functions iff we changed directory.
This has the same behavior as zsh's hook function execution, which tries to run
the functions in the order specified and silently ignores any function that
does not exist.
See http://zsh.sourceforge.net/Doc/Release/Functions.html#Hook-Functions
Also moved duplicate nopushdminus logic to the `switch-to-dir` function.
This fixes the use case where a directory in the dir stack
doesn't exist anymore, so the keystroke doesn't appear to
do anything.
It will keep trying to switch to the n-est directory in the
stack until it founds an available directory or the dirstack
has no more directories to switch to.
This way the user can keep their preferred pushd syntax while enabling
us to use a standard syntax in our defined functions.
To explain further, without a clear value on the PUSHD_MINUS option, we
could be changing the +1/-0 values all we want, that some user would
find that it didn't work for him.
We have two options, then:
- Setting a particular value, which was my first approach.
- Using `emulate -L zsh` to ensure all options defined in the function's
body won't be passed along to the main zsh instance.
For more info see:
http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html#index-emulate
This change follows this proposed behaviour:
Ctrl+Shift+Left: move to last visited directory
Ctrl+Shift+Right: move to next visited directory
an alternative behaviour would be:
Ctrl+Shift+Left: move directory to the left in `dirs` output
Ctrl+Shift+Right: move directory to the right in `dirs` output
It also introduces `setopt nopushdminus` as a way to standardise
pushd syntax. It's value wasn't clear before, which has been the
cause of so many pull requests regarding this plugin not working
in some environments.