Clean up and fix +1/-0 syntax to work as expected

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.
This commit is contained in:
Marc Cornellà 2014-12-16 00:43:01 +01:00
parent 13e5afe805
commit 5fe22fcbc6
1 changed files with 23 additions and 6 deletions

View File

@ -1,10 +1,27 @@
##
# dircycle plugin: enables cycling through the directory
# stack using Ctrl+Shift+Left/Right
# enables cycling through the directory stack using
# Ctrl+Shift+Left/Right
#
# left/right direction follows the order in which directories
# were visited, like left/right arrows do in a browser
eval "insert-cycledleft () { zle push-line; LBUFFER='pushd -q +1'; zle accept-line }"
# NO_PUSHD_MINUS syntax:
# pushd +N: start counting from left of `dirs' output
# pushd -N: start counting from right of `dirs' output
setopt nopushdminus
insert-cycledleft () {
zle push-line
LBUFFER='pushd -q +1'
zle accept-line
}
zle -N insert-cycledleft
bindkey "\e[1;6D" insert-cycledleft
eval "insert-cycledright () { zle push-line; LBUFFER='pushd -q +0'; zle accept-line }"
insert-cycledright () {
zle push-line
LBUFFER='pushd -q -0'
zle accept-line
}
zle -N insert-cycledright
bindkey "\e[1;6D" insert-cycledleft
bindkey "\e[1;6C" insert-cycledright