From 25684843ae02bd7b57137a8e50c661b991dec23b Mon Sep 17 00:00:00 2001 From: Marlon Richert Date: Tue, 20 Apr 2021 23:12:22 +0300 Subject: [PATCH] Add change-directory() widget function --- Doc/Zsh/contrib.yo | 15 +++++++++++++++ Functions/Zle/change-directory | 29 +++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 Functions/Zle/change-directory diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo index 3c4fdded0..6ad59798c 100644 --- a/Doc/Zsh/contrib.yo +++ b/Doc/Zsh/contrib.yo @@ -2423,6 +2423,21 @@ history is restricted, so cursor motions, etc., may not pass outside of the pasted content. Text assigned to tt(BUFFER) by the active widgets is copied back into tt(PASTED) before tt(paste-finish). ) +tindex(change-directory) +item(tt(change-directory))( +This function implements the widgets tt(cd-upward), tt(cd-backward) and +tt(cd-forward). They can be used, respectively, to change to the current +directory's parent or the previous/next entry in the directory stack. They +should be initialized as follows: + +example(autoload -Uz change-directory +zle -N cd-upward change-directory +zle -N cd-backward change-directory +zle -N cd-forward change-directory +bindkey '^[^[OA' cd-upward # Alt-Up +bindkey '^[^[OD' cd-backward # Alt-Left +bindkey '^[^[OC' cd-forward # Alt-Right +) tindex(copy-earlier-word) item(tt(copy-earlier-word))( This widget works like a combination of tt(insert-last-word) and diff --git a/Functions/Zle/change-directory b/Functions/Zle/change-directory new file mode 100644 index 000000000..376e4414c --- /dev/null +++ b/Functions/Zle/change-directory @@ -0,0 +1,29 @@ +zle .push-line-or-edit +case $WIDGET in + *-upward ) + if [[ -o autocd ]]; then + BUFFER='..' + else + BUFFER='cd ..' + fi + ;; + *-backward ) + if [[ -o pushdminus ]]; then + BUFFER='pushd -1' + else + BUFFER='pushd +1' + fi + ;; + *-forward ) + if [[ -o pushdminus ]]; then + BUFFER='pushd +0' + else + BUFFER='pushd -0' + fi + ;; + * ) + print -u2 'change-directory: widget name should end in -(up|back|for)ward' + return 1 + ;; +esac +zle .accept-line -- 2.31.1