Browse Source

dircycle: keep switch until a directory is found

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.
Marc Cornellà 8 years ago
parent
commit
251bc2d380
1 changed files with 12 additions and 2 deletions
  1. 12 2
      plugins/dircycle/dircycle.plugin.zsh

+ 12 - 2
plugins/dircycle/dircycle.plugin.zsh

@@ -8,11 +8,21 @@
 #  pushd +N: start counting from left of `dirs' output
 #  pushd -N: start counting from right of `dirs' output
 
+switch-to-dir () {
+	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
+	done
+}
+
 insert-cycledleft () {
 	emulate -L zsh
 	setopt nopushdminus
 
-	builtin pushd -q +1 &>/dev/null || true
+	switch-to-dir +1
 	zle reset-prompt
 }
 zle -N insert-cycledleft
@@ -21,7 +31,7 @@ insert-cycledright () {
 	emulate -L zsh
 	setopt nopushdminus
 
-	builtin pushd -q -0 &>/dev/null || true
+	switch-to-dir -0
 	zle reset-prompt
 }
 zle -N insert-cycledright