summaryrefslogtreecommitdiff
path: root/Functions/Zle/match-word-context
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2006-08-14 16:14:41 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2006-08-14 16:14:41 +0000
commit3a97920199accf4f63b622645ea208ccad42d07b (patch)
treec3232175e212b0c2c07e8c628d9eed757666a7a9 /Functions/Zle/match-word-context
parentf2dbedcc4f878e4eb35f72899feec7593d920c5a (diff)
downloadzsh-3a97920199accf4f63b622645ea208ccad42d07b.tar.gz
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-context48
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