diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Completion/bashcompinit | 21 | ||||
-rw-r--r-- | Test/.distfiles | 1 | ||||
-rw-r--r-- | Test/Y04compgen.ztst | 21 | ||||
-rw-r--r-- | Test/compgentest | 15 |
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 +} + |