summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--Completion/Base/Utility/_regex_words5
-rw-r--r--Completion/Base/Utility/_values2
-rw-r--r--Doc/Zsh/compsys.yo6
4 files changed, 17 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 8051dc78d..5d1ff2ef1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2007-02-27  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* unposted: Doc/Zsh/compsys.yo: document now useful -t
+	option to _regex_words.
+
+	* 23198: Completion/Base/Utility/_values,
+	Completion/Base/Utility/_regex_words: make _values -s more
+	useful and use for regex completions with non-standard suffixes.
+
 2007-02-27  Clint Adams  <clint@zsh.org>
 
 	* 23196: Completion/Debian/Command/_apt: tweak apt-cache madison
diff --git a/Completion/Base/Utility/_regex_words b/Completion/Base/Utility/_regex_words
index 1cc9e9ccc..77ba197a4 100644
--- a/Completion/Base/Utility/_regex_words
+++ b/Completion/Base/Utility/_regex_words
@@ -31,9 +31,8 @@ for (( i = 1; i <= $#; i++ )); do
   if [[ $term = $'\0' ]]; then
     reply+=(":${tag}:${desc}:(( ${wds[1]//\*}:${wds[2]//(#m)[: \(\)]/\\$MATCH} ))")
   else
-    # HERE: we should add the terminator instead of a space, but
-    # there doesn't appear to be an easy way of doing that.
-    reply+=(":${tag}:${desc}:(( ${wds[1]//\*}${term//(#m)[: \(\)]/\\$MATCH}:${wds[2]//(#m)[: \(\)]/\\$MATCH} ))")
+    reply+=(":${tag}:${desc}:_values -s ${(q)term} ${(q)desc} \
+${(q)${${wds[1]//\*}//(#m)[:\[\]]/\\$MATCH}}\\[${(q)${wds[2]//(#m)[:\[\]]/\\$MATCH}}\\]")
   fi
   eval "reply+=($wds[3])"
   if (( $i == $# )); then
diff --git a/Completion/Base/Utility/_values b/Completion/Base/Utility/_values
index 5cfa4bd30..52c42bc70 100644
--- a/Completion/Base/Utility/_values
+++ b/Completion/Base/Utility/_values
@@ -50,7 +50,7 @@ if compvalues -i "$@"; then
       fi
     else
       compvalues -d descr
-      if [[ ${#noargs}+${#args}+${#opts} -ne 1 ]] && compvalues -s sep; then
+      if compvalues -s sep; then
         sep=( "-qS" "$sep" )
       else
         sep=()
diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index a0c38f8a0..de2fcc260 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -4351,7 +4351,7 @@ any argument.  In this case tt(_regex_words) could be used to generate
 a suitable expression for the arguments.
 
 )
-findex(_regex_words)
+findex(_regex_words [ tt(-t) var(term) ])
 item(tt(_regex_words) var(tag) var(description) var(spec) ...)(
 This function can be used to generate arguments for the
 tt(_regex_arguments) command which may be inserted at any point where
@@ -4379,6 +4379,10 @@ evaluated in order to avoid problems with quoting.  This means that
 typically it contains a reference to an array containing previously
 generated regex arguments.
 
+The option tt(-t) var(term) specifies a terminator for the word
+instead of the usual space.  This is handled as an auto-removable suffix
+in the manner of the option tt(-s) var(sep) to tt(_values).
+
 The result of the processing by tt(_regex_words) is placed in the array
 tt(reply), which should be made local to the calling function.
 If the set of words and arguments may be matched repeatedly, a tt(#)