1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-29 06:51:03 +02:00

Merge of Mikael Magnusson: 24076, 24081, 24082: need to cancel option

processing with -- after widget calls with arguments.
This commit is contained in:
Paul Ackersviller 2007-11-26 03:41:21 +00:00
parent 1d63bd904a
commit 53d894e7a3
4 changed files with 137 additions and 1 deletions

View file

@ -544,7 +544,19 @@ saved and then restored after the call to tt(widget); `tt(-n) var(num)'
sets the numerical argument temporarily to var(num), while `tt(-N)' sets it sets the numerical argument temporarily to var(num), while `tt(-N)' sets it
to the default, i.e. as if there were none. to the default, i.e. as if there were none.
Any further arguments will be passed to the widget. If it is a shell With the option tt(-K), var(keymap) will be used as the current keymap
during the execution of the widget. The previous keymap will be
restored when the widget exits.
Normally, calling a widget in this way does not set the special
parameter tt(WIDGET) and related parameters, so that the environment
appears as if the top-level widget called by the user were still
active. With the option tt(-w), tt(WIDGET) and related parameters are set
to reflect the widget being executed by the tt(zle) call.
Any further arguments will be passed to the widget; note that as
standard argument handling is performed, any general argument list
should be preceded by tt(-)tt(-). If it is a shell
function, these are passed down as positional parameters; for builtin function, these are passed down as positional parameters; for builtin
widgets it is up to the widget in question what it does with them. widgets it is up to the widget in question what it does with them.
Currently arguments are only handled by the incremental-search commands, Currently arguments are only handled by the incremental-search commands,

View file

@ -0,0 +1,35 @@
emulate -L zsh
setopt extendedglob
autoload match-words-by-style
local curcontext=":zle:$WIDGET" word done
local -a matched_words
integer count=${NUMERIC:-1}
if (( count < 0 )); then
(( NUMERIC = -count ))
zle ${WIDGET##backward-}
return
fi
while (( count-- )); do
match-words-by-style
word="$matched_words[2]$matched_words[3]"
if [[ -n $word ]]; then
if [[ -n $done || $LASTWIDGET = *kill* ]]; then
CUTBUFFER="$word$CUTBUFFER"
else
zle copy-region-as-kill -- "$word"
fi
LBUFFER=$matched_words[1]
else
return 1
fi
done=1
done
return 0

View file

@ -0,0 +1,55 @@
# Delete the entire word around the cursor. Does not handle
# a prefix argument; either the cursor is in the word or it isn't.
# The word may be just before the cursor, e.g.
# print this is a line
# ^ here
# and then the word before (i.e. `this') will be deleted.
#
# If the widget has the name `kill' in, the text deleted will be
# saved for future yanking in the normal way.
emulate -L zsh
setopt extendedglob
local curcontext=:zle:$WIDGET
local -a matched_words
# Start and end of range of characters to remove.
integer pos1 pos2
autoload -U match-words-by-style
match-words-by-style
if [[ -n "${matched_words[3]}" ]]; then
# There's whitespace before the cursor, so the word we are deleting
# starts at the cursor position.
pos1=$CURSOR
else
# No whitespace before us, so delete any wordcharacters there.
pos1="${#matched_words[1]}"
fi
if [[ -n "${matched_words[4]}" ]]; then
# There's whitespace at the cursor position, so only delete
# up to the cursor position.
(( pos2 = CURSOR + 1 ))
else
# No whitespace at the cursor position, so delete the
# current character and any following wordcharacters.
(( pos2 = CURSOR + ${#matched_words[5]} + 1 ))
fi
# Move the cursor then delete the block in one go for the
# purpose of undoing (and yanking, if appropriate).
(( CURSOR = pos1 ))
# If the widget name includes the word `kill', the removed
# text goes into the cutbuffer in the standard way.
if [[ $WIDGET = *kill* ]]; then
local word="${BUFFER[pos1+1,pos2-1]}"
if [[ $LASTWIDGET = *kill* ]]; then
CUTBUFFER="$CUTBUFFER$word"
else
zle copy-region-as-kill -- "$word"
fi
fi
BUFFER="${BUFFER[1,pos1]}${BUFFER[pos2,-1]}"

View file

@ -0,0 +1,34 @@
emulate -L zsh
setopt extendedglob
autoload match-words-by-style
local curcontext=":zle:$WIDGET" word done
local -a matched_words
integer count=${NUMERIC:-1}
if (( count < 0 )); then
(( NUMERIC = -count ))
zle backward-$WIDGET
return
fi
while (( count-- )); do
match-words-by-style
word="${(j..)matched_words[4,5]}"
if [[ -n $word ]]; then
if [[ -n $done || $LASTWIDGET = *kill* ]]; then
CUTBUFFER="$CUTBUFFER$word"
else
zle copy-region-as-kill -- $word
fi
RBUFFER=${(j..)matched_words[6,7]}
else
return 1
fi
done=1
done
return 0