diff options
author | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2001-07-19 08:40:36 +0000 |
---|---|---|
committer | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2001-07-19 08:40:36 +0000 |
commit | facff10b116622e8cb409d5b1aa6eaa7574f949d (patch) | |
tree | cf1f9806ba88aafe762663f8c4b2b1cec44c59b9 /Completion/Base/Utility | |
parent | 6a3e89d5391073cf51c459e7ab7b5c1e3b4528d4 (diff) | |
download | zsh-facff10b116622e8cb409d5b1aa6eaa7574f949d.tar.gz zsh-facff10b116622e8cb409d5b1aa6eaa7574f949d.tar.xz zsh-facff10b116622e8cb409d5b1aa6eaa7574f949d.zip |
yet another followup to 15497; make _describe filter out non-matching strings before calling compdescribe, otherwise some matches will be hiddens (15415)
Diffstat (limited to 'Completion/Base/Utility')
-rw-r--r-- | Completion/Base/Utility/_describe | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Completion/Base/Utility/_describe b/Completion/Base/Utility/_describe index a58954f47..45b8c17d6 100644 --- a/Completion/Base/Utility/_describe +++ b/Completion/Base/Utility/_describe @@ -21,8 +21,49 @@ fi # Do the tests. `showd' is set if the descriptions should be shown. zstyle -T ":completion:${curcontext}:$_type" verbose && _showd=yes + if zstyle -T ":completion:${curcontext}:$_type" list-grouped; then + local _argv _new _strs _mats _opts _i=2 + + _argv=( "$@" ) _grp=(-g) + _new=( "$1" ) + shift + + while (( $# )); do + + _strs="_a_$_i" + eval local "_a_$_i;_a_$_i"'=( "${'$1'[@]}" )' + _argv[_i]="_a_$_i" + shift + (( _i++ )) + + if [[ "$1" = (|-*) ]]; then + _mats= + else + _matss="_a_$_i" + eval local "_a_$_i;_a_$_i"'=( "${'$1'[@]}" )' + _argv[_i]="_a_$_i" + shift + (( _i++ )) + fi + + _opts=( "${(@)argv[1,(i)--]:#--}" ) + shift "$#_opts" + (( _i += $#_opts )) + if [[ $1 == -- ]]; then + shift + (( _i++ )) + fi + + if [[ -n $_mats ]]; then + compadd "$_opts[@]" -O $_strs -D $_mats -a $_strs + else + compadd "$_opts[@]" -O $_strs -a $_strs + fi + done + + set - "$_argv[@]" else _grp=() fi @@ -50,9 +91,11 @@ while _tags; do if [[ -n "$_hide" ]]; then if [[ "$PREFIX" = --* ]]; then _tmpd=( "${(@)_tmpd#--}" ) + _tmph=( "${(@)_tmph#--}" ) _tmps=( "${(@)_tmps#--}" ) elif [[ "$PREFIX" = [-+]* ]]; then _tmpd=( "${(@)_tmpd#[-+]}" ) + _tmph=( "${(@)_tmph#[-+]}" ) _tmps=( "${(@)_tmps#[-+]}" ) fi fi |