diff options
Diffstat (limited to 'plugins/dirhistory')
-rw-r--r-- | plugins/dirhistory/README.md | 22 | ||||
-rw-r--r-- | plugins/dirhistory/dirhistory.plugin.zsh | 44 |
2 files changed, 50 insertions, 16 deletions
diff --git a/plugins/dirhistory/README.md b/plugins/dirhistory/README.md index 511f2be17..223650727 100644 --- a/plugins/dirhistory/README.md +++ b/plugins/dirhistory/README.md @@ -7,6 +7,7 @@ To use it, add `dirhistory` to the plugins array in your zshrc file: ```zsh plugins=(... dirhistory) ``` + ## Keyboard Shortcuts | Shortcut | Description | @@ -15,3 +16,24 @@ plugins=(... dirhistory) | <kbd>alt</kbd> + <kbd>right</kbd> | Undo <kbd>alt</kbd> + <kbd>left</kbd> | | <kbd>alt</kbd> + <kbd>up</kbd> | Move into the parent directory | | <kbd>alt</kbd> + <kbd>down</kbd> | Move into the first child directory by alphabetical order | + +## Usage + +This plugin allows you to navigate the history of previous current-working-directories using ALT-LEFT and ALT-RIGHT. ALT-LEFT moves back to directories that the user has changed to in the past, and ALT-RIGHT undoes ALT-LEFT. MAC users may alternately use OPT-LEFT and OPT-RIGHT. + +Also, navigate directory **hierarchy** using ALT-UP and ALT-DOWN. (mac keybindings not yet implemented). ALT-UP moves to higher hierarchy (shortcut for 'cd ..'). ALT-DOWN moves into the first directory found in alphabetical order (useful to navigate long empty directories e.g. java packages) + +For example, if the shell was started, and the following commands were entered: + +```shell +cd ~ +cd /usr +cd share +cd doc +``` + +Then entering ALT-LEFT at the prompt would change directory from /usr/share/doc to /usr/share, then if pressed again to /usr/, then ~. If ALT-RIGHT were pressed the directory would be changed to /usr/ again. + +After that, ALT-DOWN will probably go to /usr/bin (depends on your /usr structure), ALT-UP will return to /usr, then ALT-UP will get you to / + +**Currently the max history size is 30**. The navigation should work for xterm, PuTTY xterm mode, GNU screen, and on MAC with alternate keys as mentioned above. diff --git a/plugins/dirhistory/dirhistory.plugin.zsh b/plugins/dirhistory/dirhistory.plugin.zsh index 239915e48..cbac84600 100644 --- a/plugins/dirhistory/dirhistory.plugin.zsh +++ b/plugins/dirhistory/dirhistory.plugin.zsh @@ -2,7 +2,7 @@ # Navigate directory history using ALT-LEFT and ALT-RIGHT. ALT-LEFT moves back to directories # that the user has changed to in the past, and ALT-RIGHT undoes ALT-LEFT. # -# Navigate directory hierarchy using ALT-UP and ALT-DOWN. (mac keybindings not yet implemented) +# Navigate directory hierarchy using ALT-UP and ALT-DOWN. # ALT-UP moves to higher hierarchy (cd ..) # ALT-DOWN moves into the first directory found in alphabetical order # @@ -53,7 +53,8 @@ function push_future() { } # Called by zsh when directory changes -chpwd_functions+=(chpwd_dirhistory) +autoload -U add-zsh-hook +add-zsh-hook chpwd chpwd_dirhistory function chpwd_dirhistory() { push_past $PWD # If DIRHISTORY_CD is not set... @@ -107,26 +108,30 @@ function dirhistory_forward() { # Bind keys to history navigation function dirhistory_zle_dirhistory_back() { # Erase current line in buffer - zle kill-buffer - dirhistory_back - zle accept-line + zle .kill-buffer + dirhistory_back + zle .accept-line } function dirhistory_zle_dirhistory_future() { # Erase current line in buffer - zle kill-buffer + zle .kill-buffer dirhistory_forward - zle accept-line + zle .accept-line } zle -N dirhistory_zle_dirhistory_back # xterm in normal mode bindkey "\e[3D" dirhistory_zle_dirhistory_back bindkey "\e[1;3D" dirhistory_zle_dirhistory_back -# Mac teminal (alt+left/right) +# Terminal.app if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then bindkey "^[b" dirhistory_zle_dirhistory_back fi +# iTerm2 +if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then + bindkey "^[^[[D" dirhistory_zle_dirhistory_back +fi # Putty: bindkey "\e\e[D" dirhistory_zle_dirhistory_back # GNU screen: @@ -135,9 +140,14 @@ bindkey "\eO3D" dirhistory_zle_dirhistory_back zle -N dirhistory_zle_dirhistory_future bindkey "\e[3C" dirhistory_zle_dirhistory_future bindkey "\e[1;3C" dirhistory_zle_dirhistory_future +# Terminal.app if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then bindkey "^[f" dirhistory_zle_dirhistory_future fi +# iTerm2 +if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then + bindkey "^[^[[C" dirhistory_zle_dirhistory_future +fi bindkey "\e\e[C" dirhistory_zle_dirhistory_future bindkey "\eO3C" dirhistory_zle_dirhistory_future @@ -159,23 +169,24 @@ function dirhistory_down() { # Bind keys to hierarchy navigation function dirhistory_zle_dirhistory_up() { - zle kill-buffer # Erase current line in buffer + zle .kill-buffer # Erase current line in buffer dirhistory_up - zle accept-line + zle .accept-line } function dirhistory_zle_dirhistory_down() { - zle kill-buffer # Erase current line in buffer + zle .kill-buffer # Erase current line in buffer dirhistory_down - zle accept-line + zle .accept-line } zle -N dirhistory_zle_dirhistory_up # xterm in normal mode bindkey "\e[3A" dirhistory_zle_dirhistory_up bindkey "\e[1;3A" dirhistory_zle_dirhistory_up -# Mac teminal (alt+up) - #bindkey "^[?" dirhistory_zle_dirhistory_up #dont know it +if [[ "$TERM_PROGRAM" == "Apple_Terminal" || "$TERM_PROGRAM" == "iTerm.app" ]]; then + bindkey "^[[A" dirhistory_zle_dirhistory_up +fi # Putty: bindkey "\e\e[A" dirhistory_zle_dirhistory_up # GNU screen: @@ -184,7 +195,8 @@ bindkey "\eO3A" dirhistory_zle_dirhistory_up zle -N dirhistory_zle_dirhistory_down bindkey "\e[3B" dirhistory_zle_dirhistory_down bindkey "\e[1;3B" dirhistory_zle_dirhistory_down -# Mac teminal (alt+down) - #bindkey "^[?" dirhistory_zle_dirhistory_down #dont know it +if [[ "$TERM_PROGRAM" == "Apple_Terminal" || "$TERM_PROGRAM" == "iTerm.app" ]]; then + bindkey "^[[B" dirhistory_zle_dirhistory_down +fi bindkey "\e\e[B" dirhistory_zle_dirhistory_down bindkey "\eO3B" dirhistory_zle_dirhistory_down |