mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-26 16:40:29 +01:00
24781: enhance word-context to use next or previous word
This commit is contained in:
parent
93fce8372d
commit
374b31616b
3 changed files with 19 additions and 17 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue