diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2006-08-14 16:14:41 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2006-08-14 16:14:41 +0000 |
commit | 3a97920199accf4f63b622645ea208ccad42d07b (patch) | |
tree | c3232175e212b0c2c07e8c628d9eed757666a7a9 /Functions/Zle/match-word-context | |
parent | f2dbedcc4f878e4eb35f72899feec7593d920c5a (diff) | |
download | zsh-3a97920199accf4f63b622645ea208ccad42d07b.tar.gz zsh-3a97920199accf4f63b622645ea208ccad42d07b.tar.xz zsh-3a97920199accf4f63b622645ea208ccad42d07b.zip |
22606: add match-word-context.
Remove workaround from match-words-by-style
Diffstat (limited to 'Functions/Zle/match-word-context')
-rw-r--r-- | Functions/Zle/match-word-context | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Functions/Zle/match-word-context b/Functions/Zle/match-word-context new file mode 100644 index 000000000..da68b6c75 --- /dev/null +++ b/Functions/Zle/match-word-context @@ -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 |