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.
This commit is contained in:
Marc Cornellà 2016-06-17 10:44:52 +02:00
parent 7c1ca0e4d8
commit 251bc2d380
1 changed files with 12 additions and 2 deletions

View File

@ -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