Browse Source

Merge pull request #3413 from mcornella/fix-dircycle-plugin

dircycle plugin: clean and fix logic once and for all
Robby Russell 9 years ago
parent
commit
0a0a27857e
1 changed files with 34 additions and 7 deletions
  1. 34 7
      plugins/dircycle/dircycle.plugin.zsh

+ 34 - 7
plugins/dircycle/dircycle.plugin.zsh

@@ -1,10 +1,37 @@
-##
-# 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
+
+insert-cycledleft () {
+	emulate -L zsh
+	setopt nopushdminus
+
+	builtin pushd -q +1 &>/dev/null || true
+	zle reset-prompt
+}
 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 () {
+	emulate -L zsh
+	setopt nopushdminus
+
+	builtin pushd -q -0 &>/dev/null || true
+	zle reset-prompt
+}
 zle -N insert-cycledright
-bindkey "\e[1;6C" insert-cycledright
+
+
+# add key bindings for iTerm2
+if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
+	bindkey "^[[1;6D" insert-cycledleft
+	bindkey "^[[1;6C" insert-cycledright
+else
+	bindkey "\e[1;6D" insert-cycledleft
+	bindkey "\e[1;6C" insert-cycledright
+fi