summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Cornellà <marc.cornella@live.com>2018-10-02 21:31:26 +0200
committerGitHub <noreply@github.com>2018-10-02 21:31:26 +0200
commitac3b345365354252b7c264d5ff4fe6957c11798d (patch)
tree2c0c449989603e508037de58995b5aaf336f2dea
parenta8e69686aa6c782eed3d749de5fb54758de10734 (diff)
downloadzsh-ac3b345365354252b7c264d5ff4fe6957c11798d.tar.gz
zsh-ac3b345365354252b7c264d5ff4fe6957c11798d.tar.bz2
zsh-ac3b345365354252b7c264d5ff4fe6957c11798d.zip
dircycle: trigger appropriate hooks after directory change (#7161)
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.
-rw-r--r--plugins/dircycle/dircycle.plugin.zsh21
1 files changed, 13 insertions, 8 deletions
diff --git a/plugins/dircycle/dircycle.plugin.zsh b/plugins/dircycle/dircycle.plugin.zsh
index 8c58cab4c..bb69f6b3f 100644
--- a/plugins/dircycle/dircycle.plugin.zsh
+++ b/plugins/dircycle/dircycle.plugin.zsh
@@ -9,31 +9,36 @@
# pushd -N: start counting from right of `dirs' output
switch-to-dir () {
- [[ ${#dirstack} -eq 0 ]] && return
+ setopt localoptions nopushdminus
+ [[ ${#dirstack} -eq 0 ]] && return 1
while ! builtin pushd -q $1 &>/dev/null; do
# We found a missing directory: pop it out of the dir stack
builtin popd -q $1
# Stop trying if there are no more directories in the dir stack
- [[ ${#dirstack} -eq 0 ]] && break
+ [[ ${#dirstack} -eq 0 ]] && return 1
done
}
insert-cycledleft () {
- emulate -L zsh
- setopt nopushdminus
+ switch-to-dir +1 || return
- switch-to-dir +1
+ local fn
+ for fn (chpwd $chpwd_functions precmd $precmd_functions); do
+ (( $+functions[$fn] )) && $fn
+ done
zle reset-prompt
}
zle -N insert-cycledleft
insert-cycledright () {
- emulate -L zsh
- setopt nopushdminus
+ switch-to-dir -0 || return
- switch-to-dir -0
+ local fn
+ for fn (chpwd $chpwd_functions precmd $precmd_functions); do
+ (( $+functions[$fn] )) && $fn
+ done
zle reset-prompt
}
zle -N insert-cycledright