mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-27 04:40:59 +01:00
22606: add match-word-context.
Remove workaround from match-words-by-style
This commit is contained in:
parent
f2dbedcc4f
commit
3a97920199
5 changed files with 94 additions and 23 deletions
48
Functions/Zle/match-word-context
Normal file
48
Functions/Zle/match-word-context
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# See if we can extend the word context to something more specific.
|
||||
# curcontext must be set to the base context by this point; it
|
||||
# will be appended to directly.
|
||||
|
||||
emulate -L zsh
|
||||
setopt extendedglob
|
||||
|
||||
local -a worcon bufwords
|
||||
local pat tag lastword word
|
||||
integer iword
|
||||
|
||||
zstyle -a $curcontext word-context worcon || return 0
|
||||
|
||||
if (( ${#worcon} % 2 )); then
|
||||
zle -M "Bad word-context style in context $curcontext"
|
||||
return
|
||||
fi
|
||||
|
||||
bufwords=(${(z)LBUFFER})
|
||||
iword=${#bufwords}
|
||||
lastword=${bufwords[-1]}
|
||||
bufwords=(${(z)BUFFER})
|
||||
|
||||
if [[ $lastword = ${bufwords[iword]} ]]; then
|
||||
# If the word immediately left of the cursor is complete,
|
||||
# we're not on it. Either we're on unquoted whitespace, or
|
||||
# the start of a new word. Test the latter.
|
||||
if [[ -z $RBUFFER ]]; then
|
||||
# Nothing there, so not in a word.
|
||||
word=''
|
||||
elif [[ $RBUFFER[1] = [[:space:]] ]]; then
|
||||
# Whitespace, so not in a word.
|
||||
word=' '
|
||||
else
|
||||
# We want the next word along.
|
||||
word=${bufwords[iword+1]}
|
||||
fi
|
||||
else
|
||||
# We're on a word.
|
||||
word=${bufwords[iword]}
|
||||
fi
|
||||
|
||||
for pat tag in "${worcon[@]}"; do
|
||||
if [[ $word = ${~pat} ]]; then
|
||||
curcontext+=":$tag"
|
||||
return
|
||||
fi
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue