diff options
author | Oliver Kiddle <opk@zsh.org> | 2016-06-29 17:05:06 +0200 |
---|---|---|
committer | Oliver Kiddle <opk@zsh.org> | 2016-06-29 17:05:06 +0200 |
commit | a73ae70e8217d7163aecdbdad4d8af08eced8a55 (patch) | |
tree | ada747729a411bc50f38d410f447efcac1dfd4c9 /Functions/Zle/vi-pipe | |
parent | 5ea32ce2fcd527e9b6e6991c007d296afc5aa44d (diff) | |
download | zsh-a73ae70e8217d7163aecdbdad4d8af08eced8a55.tar.gz zsh-a73ae70e8217d7163aecdbdad4d8af08eced8a55.tar.xz zsh-a73ae70e8217d7163aecdbdad4d8af08eced8a55.zip |
38770: vi upper/lowercase widgets and shell widget example that reads a vi movement
Diffstat (limited to 'Functions/Zle/vi-pipe')
-rw-r--r-- | Functions/Zle/vi-pipe | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Functions/Zle/vi-pipe b/Functions/Zle/vi-pipe new file mode 100644 index 000000000..2d2e29587 --- /dev/null +++ b/Functions/Zle/vi-pipe @@ -0,0 +1,31 @@ +# Example of a widget that takes a vi motion + +# Filter part of buffer corresponding to a vi motion through an external +# program. + +# To enable with vi compatible bindings use: +# autoload -Uz vi-pipe +# bindkey -a '!' vi-pipe + +autoload -Uz read-from-minibuffer +local _save_cut="$CUTBUFFER" REPLY + +# Use the standard vi-delete to accept a vi motion. +zle .vi-delete || return +read-from-minibuffer "!" +local _save_cur=$CURSOR + +# cut buffer contains the deleted text and can be modified +CUTBUFFER="$(eval $REPLY <<<$CUTBUFFER)" + +# put the modified text back in position. +if [[ CURSOR -eq 0 || $BUFFER[CURSOR] = $'\n' ]]; then + # at the beginning of a line, vi-delete won't have moved the cursor + # back to a previous line + zle .vi-put-before -n 1 +else + zle .vi-put-after -n 1 +fi + +# restore cut buffer and cursor to the start of the range +CUTBUFFER="$_save_cut" CURSOR="$_save_cur" |