diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Doc/Zsh/contrib.yo | 12 | ||||
-rw-r--r-- | Functions/Zle/match-words-by-style | 63 |
3 files changed, 65 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog index 4626e6bd8..464d4f1dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004-12-09 Peter Stephenson <pws@csr.com> + + * 20612: Doc/Zsh/contrib.yo, Functions/Zle/match-words-by-style: + options to match-words-by-style can override styles. + 2004-12-07 Peter Stephenson <pws@csr.com> * 20605: Doc/Zsh/builtins.yo, Src/builtin.c, Src/exec.c, diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo index b7c80211e..14a402785 100644 --- a/Doc/Zsh/contrib.yo +++ b/Doc/Zsh/contrib.yo @@ -513,6 +513,18 @@ tt(skip-chars) style, (5) the word at or following the cursor (6) any non-word characters following that word (7) the remainder of the line. Any of the elements may be an empty string; the calling function should test for this to decide whether it can perform its function. + +It is possible to pass options with arguments to tt(match-words-by-style) +to override the use of styles. The options are: +startsitem() +sitem(tt(-w))(var(word-style)) +sitem(tt(-s))(var(skip-chars)) +sitem(tt(-c))(var(word-class)) +sitem(tt(-C))(var(word-chars)) +endsitem() + +For example, tt(match-words-by-style -w shell -c 0) may be used to +extract the command argument around the cursor. ) tindex(delete-whole-word-match) item(tt(delete-whole-word-match))( diff --git a/Functions/Zle/match-words-by-style b/Functions/Zle/match-words-by-style index 0ca51d4fd..9d637a587 100644 --- a/Functions/Zle/match-words-by-style +++ b/Functions/Zle/match-words-by-style @@ -57,12 +57,17 @@ # will appear in <whitespace-after-cursor> if it is whitespace, else in # <word-after-cursor>. This style is mostly useful for forcing # transposition to ignore the current character. - +# +# The values of the styles can be overridden by options to the function: +# -w <word-style> +# -s <skip-chars> +# -c <word-class> +# -C <word-chars> emulate -L zsh setopt extendedglob -local wordstyle spacepat wordpat1 wordpat2 opt charskip +local wordstyle spacepat wordpat1 wordpat2 opt charskip wordchars wordclass local match mbegin mend pat1 pat2 word1 word2 ws1 ws2 ws3 skip local MATCH MBEGIN MEND @@ -70,8 +75,32 @@ if [[ -z $curcontext ]]; then local curcontext=:zle:match-words-by-style fi -zstyle -s $curcontext word-style wordstyle -zstyle -s $curcontext skip-chars skip +while getopts "w:s:c:C:" opt; do + case $opt in + (w) + wordstyle=$OPTARG + ;; + + (s) + skip=$OPTARG + ;; + + (c) + wordclass=$OPTARG + ;; + + (C) + wordchars=$OPTARG + ;; + + (*) + return 1 + ;; + esac +done + +[[ -z $wordstyle ]] && zstyle -s $curcontext word-style wordstyle +[[ -z $skip ]] && zstyle -s $curcontext skip-chars skip [[ -z $skip ]] && skip=0 case $wordstyle in @@ -107,20 +136,24 @@ case $wordstyle in ;; (*) local wc # See if there is a character class. - if zstyle -s $curcontext word-class wc; then - # Treat as a character class: do minimal quoting. - wc=${wc//(#m)[\'\"\`\$\(\)\^]/\\$MATCH} + wc=$wordclass + if [[ -n $wc ]] || zstyle -s $curcontext word-class wc; then + # Treat as a character class: do minimal quoting. + wc=${wc//(#m)[\'\"\`\$\(\)\^]/\\$MATCH} else - # See if there is a local version of $WORDCHARS. + # See if there is a local version of $WORDCHARS. + wc=$wordchars + if [[ -z $wc ]]; then zstyle -s $curcontext word-chars wc || wc=$WORDCHARS - if [[ $wc = (#b)(?*)-(*) ]]; then - # We need to bring any `-' to the front to avoid confusing - # character classes... we get away with `]' since in zsh - # this isn't a pattern character if it's quoted. - wc=-$match[1]$match[2] - fi - wc="${(q)wc}" + fi + if [[ $wc = (#b)(?*)-(*) ]]; then + # We need to bring any `-' to the front to avoid confusing + # character classes... we get away with `]' since in zsh + # this isn't a pattern character if it's quoted. + wc=-$match[1]$match[2] + fi + wc="${(q)wc}" fi # Quote $wc where necessary, because we don't want those # characters to be considered as pattern characters later on. |