summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Completion/bashcompinit21
-rw-r--r--Test/.distfiles1
-rw-r--r--Test/Y04compgen.ztst21
-rw-r--r--Test/compgentest15
5 files changed, 56 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 9107e0e7d..758a0cc66 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2011-05-04  Peter Stephenson  <pws@csr.com>
 
+	* Rocky Bernstein: 29135 (plus tweaks): Completion/bashcompinit,
+	Test/.distfiles, Test/Y04compgen.ztst, Test/compgentest: fix and
+	test "compgen -W" in bash completion.
+
 	* unposted: NEWS: a few notes for next release.
 
 2011-05-03  Peter Stephenson  <p.w.stephenson@ntlworld.com>
@@ -14574,5 +14578,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5275 $
+* $Revision: 1.5276 $
 *****************************************************
diff --git a/Completion/bashcompinit b/Completion/bashcompinit
index cba436a55..2ccc94de9 100644
--- a/Completion/bashcompinit
+++ b/Completion/bashcompinit
@@ -12,14 +12,14 @@ _bash_complete() {
   (( COMP_CWORD = CURRENT - 1))
   COMP_WORDS=( $words )
   BASH_VERSINFO=( 2 05b 0 1 release )
-  
+
   savejobstates=( ${(kv)jobstates} )
   savejobtexts=( ${(kv)jobtexts} )
-  
+
   [[ ${argv[${argv[(I)nospace]:-0}-1]} = -o ]] && suf=( -S '' )
- 
+
   matches=( ${(f)"$(compgen $@)"} )
-  
+
   if [[ -n $matches ]]; then
     if [[ ${argv[${argv[(I)filenames]:-0}-1]} = -o ]]; then
       compset -P '*/' && matches=( ${matches##*/} )
@@ -41,11 +41,18 @@ _bash_complete() {
   return ret
 }
 
+_compgen_opt_words() {
+  typeset -a words
+  words=( ${~=1} )
+  local find="$2"
+  results=(${(M)words[@]:#$find*})
+}
+
 compgen() {
-  local opts prefix suffix job OPTARG OPTIND ret=1 
+  local opts prefix suffix job OPTARG OPTIND ret=1
   local -a name res results jids
   local -A shortopts
-  
+
   emulate -L sh
   setopt kshglob noshglob braceexpand nokshautoload
 
@@ -128,7 +135,7 @@ compgen() {
         results+=( ${~OPTARG} )
 	unsetopt nullglob
       ;;
-      W) eval "results+=( $OPTARG )" ;;
+      W) _compgen_opt_words "$OPTARG" "${@[-1]}" ;;
       C) results+=( $(eval $OPTARG) ) ;;
       P) prefix="$OPTARG" ;;
       S) suffix="$OPTARG" ;;
diff --git a/Test/.distfiles b/Test/.distfiles
index 0e691743b..6a2d1bc4c 100644
--- a/Test/.distfiles
+++ b/Test/.distfiles
@@ -42,6 +42,7 @@ V06parameter.ztst
 Y01completion.ztst
 Y02compmatch.ztst
 Y03arguments.ztst
+Y04compgen.ztst
 comptest
 runtests.zsh
 ztst.zsh
diff --git a/Test/Y04compgen.ztst b/Test/Y04compgen.ztst
new file mode 100644
index 000000000..90dce6148
--- /dev/null
+++ b/Test/Y04compgen.ztst
@@ -0,0 +1,21 @@
+# Tests for bash compgen compatibility.
+
+%prep
+  if ( zmodload zsh/parameter ) >/dev/null 2>&1; then
+    . $ZTST_srcdir/compgentest
+    comptestinit -z $ZTST_testdir/../Src/zsh &&
+  else
+    ZTST_unimplemented="the zsh/parameter module is not available"
+  fi
+
+%test
+
+  comptest $': \t\t\t\t\t\t\t'
+0:bash compatibility: compgen -W
+>abc
+>abe
+>ab
+
+%clean
+
+  zmodload -ui zsh/parameter
diff --git a/Test/compgentest b/Test/compgentest
new file mode 100644
index 000000000..26b202c43
--- /dev/null
+++ b/Test/compgentest
@@ -0,0 +1,15 @@
+comptestinit () {
+  
+  setopt extendedglob
+  [[ -d $ZTST_testdir/Modules/zsh ]] && module_path=( $ZTST_testdir/Modules )
+
+  zmodload -i zsh/parameter || return $?
+  autoload -Uz bashcompinit || return $?
+  bashcompinit || return $?
+
+}
+
+comptest () {
+  compgen -W 'abc abe ab a def' ab
+}
+