diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | Doc/Zsh/contrib.yo | 7 | ||||
-rw-r--r-- | Functions/Zle/match-word-context | 25 |
3 files changed, 19 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog index edcde3579..28b4d8f87 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2008-04-02 Peter Stephenson <pws@csr.com> + * 24781: Doc/Zsh/contrib.yo, Functions/Zle/match-word-context: + make word-context style more useful by using previous or next word + depending on widget name. + * unposted: README: minor tweaks. * unposted: NEWS, Config/version.mk: Release 4.3.6. diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo index e7ce978f6..d3dc2ac1e 100644 --- a/Doc/Zsh/contrib.yo +++ b/Doc/Zsh/contrib.yo @@ -494,9 +494,10 @@ var(pattern) and a var(subcontext). The shell argument the cursor is on is matched against each var(pattern) in turn until one matches; if it does, the context is extended by a colon and the corresponding var(subcontext). Note that the test is made against the original word on the line, with no -stripping of quotes. If the cursor is at the end of the line the test is -performed against an empty string; if it is on whitespace between words the -test is made against a single space. Some examples are given below. +stripping of quotes. Special handling is done between words: the current +context is examined and if it contains the string tt(back), the word before +the cursor is considered, else the word after cursor is considered. Some +examples are given below. Here are some examples of use of the styles, actually taken from the simplified interface in tt(select-word-style): diff --git a/Functions/Zle/match-word-context b/Functions/Zle/match-word-context index da68b6c75..7f1154498 100644 --- a/Functions/Zle/match-word-context +++ b/Functions/Zle/match-word-context @@ -6,7 +6,7 @@ emulate -L zsh setopt extendedglob local -a worcon bufwords -local pat tag lastword word +local pat tag lastword word backword forword integer iword zstyle -a $curcontext word-context worcon || return 0 @@ -23,21 +23,18 @@ 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 + # we're not on it for forward operations. + forword=${bufwords[iword+1]} else # We're on a word. - word=${bufwords[iword]} + forword=${bufwords[iword]} +fi +backword=${bufwords[iword]} + +if [[ $curcontext = *back* ]]; then + word=$backword +else + word=$forword fi for pat tag in "${worcon[@]}"; do |