Browse Source

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.
Marc Cornellà 10 years ago
parent
commit
5fe22fcbc6
1 changed files with 23 additions and 6 deletions
  1. 23 6
      plugins/dircycle/dircycle.plugin.zsh

+ 23 - 6
plugins/dircycle/dircycle.plugin.zsh

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