浏览代码

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.
Marc Cornellà 5 年之前
父节点
当前提交
ac3b345365
共有 1 个文件被更改,包括 13 次插入8 次删除
  1. 13 8
      plugins/dircycle/dircycle.plugin.zsh

+ 13 - 8
plugins/dircycle/dircycle.plugin.zsh

@@ -9,31 +9,36 @@
 #  pushd -N: start counting from right of `dirs' output
 #  pushd -N: start counting from right of `dirs' output
 
 
 switch-to-dir () {
 switch-to-dir () {
-	[[ ${#dirstack} -eq 0 ]] && return
+	setopt localoptions nopushdminus
+	[[ ${#dirstack} -eq 0 ]] && return 1
 
 
 	while ! builtin pushd -q $1 &>/dev/null; do
 	while ! builtin pushd -q $1 &>/dev/null; do
 		# We found a missing directory: pop it out of the dir stack
 		# We found a missing directory: pop it out of the dir stack
 		builtin popd -q $1
 		builtin popd -q $1
 
 
 		# Stop trying if there are no more directories in the dir stack
 		# Stop trying if there are no more directories in the dir stack
-		[[ ${#dirstack} -eq 0 ]] && break
+		[[ ${#dirstack} -eq 0 ]] && return 1
 	done
 	done
 }
 }
 
 
 insert-cycledleft () {
 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 reset-prompt
 }
 }
 zle -N insert-cycledleft
 zle -N insert-cycledleft
 
 
 insert-cycledright () {
 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 reset-prompt
 }
 }
 zle -N insert-cycledright
 zle -N insert-cycledright