浏览代码

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 年之前
父节点
当前提交
5fe22fcbc6
共有 1 个文件被更改,包括 23 次插入6 次删除
  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