From ac3b345365354252b7c264d5ff4fe6957c11798d Mon Sep 17 00:00:00 2001 From: Marc Cornellà Date: Tue, 2 Oct 2018 21:31:26 +0200 Subject: dircycle: trigger appropriate hooks after directory change (#7161) This commit triggers precmd and chpwd hook functions iff we changed directory. This has the same behavior as zsh's hook function execution, which tries to run the functions in the order specified and silently ignores any function that does not exist. See http://zsh.sourceforge.net/Doc/Release/Functions.html#Hook-Functions Also moved duplicate nopushdminus logic to the `switch-to-dir` function. --- plugins/dircycle/dircycle.plugin.zsh | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'plugins/dircycle') diff --git a/plugins/dircycle/dircycle.plugin.zsh b/plugins/dircycle/dircycle.plugin.zsh index 8c58cab4c..bb69f6b3f 100644 --- a/plugins/dircycle/dircycle.plugin.zsh +++ b/plugins/dircycle/dircycle.plugin.zsh @@ -9,31 +9,36 @@ # pushd -N: start counting from right of `dirs' output switch-to-dir () { - [[ ${#dirstack} -eq 0 ]] && return + setopt localoptions nopushdminus + [[ ${#dirstack} -eq 0 ]] && return 1 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 + [[ ${#dirstack} -eq 0 ]] && return 1 done } insert-cycledleft () { - emulate -L zsh - setopt nopushdminus + switch-to-dir +1 || return - switch-to-dir +1 + local fn + for fn (chpwd $chpwd_functions precmd $precmd_functions); do + (( $+functions[$fn] )) && $fn + done zle reset-prompt } zle -N insert-cycledleft insert-cycledright () { - emulate -L zsh - setopt nopushdminus + switch-to-dir -0 || return - switch-to-dir -0 + local fn + for fn (chpwd $chpwd_functions precmd $precmd_functions); do + (( $+functions[$fn] )) && $fn + done zle reset-prompt } zle -N insert-cycledright -- cgit v1.2.3-70-g09d2 From ceb8e7d3040113938c60b23b9466584cb66cb15d Mon Sep 17 00:00:00 2001 From: Griko Nibras Date: Thu, 4 Oct 2018 18:04:04 +0700 Subject: dircycle: add README (#7213) --- plugins/dircycle/README.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 plugins/dircycle/README.md (limited to 'plugins/dircycle') diff --git a/plugins/dircycle/README.md b/plugins/dircycle/README.md new file mode 100644 index 000000000..9e1b3f644 --- /dev/null +++ b/plugins/dircycle/README.md @@ -0,0 +1,79 @@ +# dircycle + +Plugin for cycling through the directory stack + +This plugins enables directory navigation similar when using back and forward on browsers or common file explorers like Finder or Nautilus. + +This is a small zle trick that lets you cycle your directory stack left or right using Ctrl+Shift+Left/Right. This is useful when moving back and forth between directories in development environments, and can be thought of as kind of a nondestructive pushd/popd. + +## Enabling the plugin + +1. Open your `.zshrc` file and add `dircycle` in the plugins section: + + ```zsh + plugins=( + # all your enabled plugins + dircycle + ) + ``` + +2. Reload the source file or restart your Terminal session: + + ```console + $ source ~/.zshrc + $ + ``` + +## Usage Examples + +Say you opened these directories on the terminal: + +```console +~$ cd Projects +~/Projects$ cd Hacktoberfest +~/Projects/Hacktoberfest$ cd oh-my-zsh +~/Projects/Hacktoberfest/oh-my-zsh$ dirs -v +0 ~/Projects/Hacktoberfest/oh-my-zsh +1 ~/Projects/Hacktoberfest +2 ~/Projects +3 ~ +``` + +By pressing Ctrl + Shift + Left, the current working directory or `$CWD` will be from `oh-my-zsh` to `Hacktoberfest`. Press it again and it will be at `Projects`. + +And by pressing Ctrl + Shift + Right, the `$CWD` will be from `Projects` to `Hacktoberfest`. Press it again and it will be at `oh-my-zsh`. + +Here's a example history table with the same accessed directories like above: + +| Current `$CWD` | Key press | New `$CWD` | +| --------------- | ----------------------------------------------------- | --------------- | +| `oh-my-zsh` | Ctrl + Shift + Left | `Hacktoberfest` | +| `Hacktoberfest` | Ctrl + Shift + Left | `Projects` | +| `Projects` | Ctrl + Shift + Left | `~` | +| `~` | Ctrl + Shift + Right | `Projects` | +| `Projects` | Ctrl + Shift + Right | `Hacktoberfest` | +| `Hacktoberfest` | Ctrl + Shift + Right | `oh-my-zsh` | +| `oh-my-zsh` | Ctrl + Shift + Right | `~` | + +Note the last traversal, when pressing Ctrl + Shift + Right on a last known `$CWD`, it will change back to the first known `$CWD`, which in the example is `~`. + +Here's an asciinema cast demonstrating the example above: + +[![asciicast](https://asciinema.org/a/204406.png)](https://asciinema.org/a/204406) + +## Functions + +| Function | Description | +| -------------------- | --------------------------------------------------------------------------------------------------------- | +| `insert-cycledleft` | Change `$CWD` to the previous known stack, binded on Ctrl + Shift + Left | +| `insert-cycledright` | Change `$CWD` to the next known stack, binded on Ctrl + Shift + Right | + +You can bind these functions to other key sequences, as long as you know the bindkey sequence: + +For example, these commands bind to Alt+Shift+Left/Right in xterm-256color: +``` +bindkey '^[[1;4D' insert-cycledleft +bindkey '^[[1;4C' insert-cycledright +``` + +You can get the bindkey sequence pressing Ctrl + V, then pressing the keyboard shortcut you want to use. -- cgit v1.2.3-70-g09d2 From 982e14cd3ac33951efd288c917f17ff6439951ab Mon Sep 17 00:00:00 2001 From: Griko Nibras Date: Fri, 5 Oct 2018 04:47:36 +0700 Subject: dircycle: improve README (#7223) + changed keypresses to use the tag + added "rebinding keys" section - removed line break on description - removed line break on "rebinding keys" --- plugins/dircycle/README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'plugins/dircycle') diff --git a/plugins/dircycle/README.md b/plugins/dircycle/README.md index 9e1b3f644..3ac162f05 100644 --- a/plugins/dircycle/README.md +++ b/plugins/dircycle/README.md @@ -2,9 +2,7 @@ Plugin for cycling through the directory stack -This plugins enables directory navigation similar when using back and forward on browsers or common file explorers like Finder or Nautilus. - -This is a small zle trick that lets you cycle your directory stack left or right using Ctrl+Shift+Left/Right. This is useful when moving back and forth between directories in development environments, and can be thought of as kind of a nondestructive pushd/popd. +This plugin enables directory navigation similar to using back and forward on browsers or common file explorers like Finder or Nautilus. It uses a small zle trick that lets you cycle through your directory stack left or right using Ctrl + Shift + Left / Right . This is useful when moving back and forth between directories in development environments, and can be thought of as kind of a nondestructive pushd/popd. ## Enabling the plugin @@ -68,12 +66,13 @@ Here's an asciinema cast demonstrating the example above: | `insert-cycledleft` | Change `$CWD` to the previous known stack, binded on Ctrl + Shift + Left | | `insert-cycledright` | Change `$CWD` to the next known stack, binded on Ctrl + Shift + Right | -You can bind these functions to other key sequences, as long as you know the bindkey sequence: +## Rebinding keys -For example, these commands bind to Alt+Shift+Left/Right in xterm-256color: -``` +You can bind these functions to other key sequences, as long as you know the bindkey sequence. For example, these commands bind to Alt + Shift + Left / Right in `xterm-256color`: + +```zsh bindkey '^[[1;4D' insert-cycledleft bindkey '^[[1;4C' insert-cycledright ``` -You can get the bindkey sequence pressing Ctrl + V, then pressing the keyboard shortcut you want to use. +You can get the bindkey sequence by pressing Ctrl + V, then pressing the keyboard shortcut you want to use. -- cgit v1.2.3-70-g09d2