From facff10b116622e8cb409d5b1aa6eaa7574f949d Mon Sep 17 00:00:00 2001 From: Sven Wischnowsky Date: Thu, 19 Jul 2001 08:40:36 +0000 Subject: yet another followup to 15497; make _describe filter out non-matching strings before calling compdescribe, otherwise some matches will be hiddens (15415) --- ChangeLog | 7 +++++++ Completion/Base/Utility/_describe | 43 +++++++++++++++++++++++++++++++++++++++ Src/Zle/computil.c | 6 +++--- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1d0560fe4..b402514e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2001-07-19 Sven Wischnowsky + + * 15415: Completion/Base/Utility/_describe, Src/Zle/computil.c: + yet another followup to 15407; make _describe filter out + non-matching strings before calling compdescribe, otherwise + some matches will be hiddens + 2001-07-18 Sven Wischnowsky * 15409: Src/Zle/computil.c: fix for 15407; there may be sets 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 diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c index 32147dd52..299f3ca98 100644 --- a/Src/Zle/computil.c +++ b/Src/Zle/computil.c @@ -64,7 +64,7 @@ struct cdset { /* Maximum string length when used with descriptions. */ -#define CD_MAXLEN 20 +#define CD_MAXLEN 30 static struct cdstate cd_state; @@ -171,8 +171,8 @@ cd_calc() } } } - if (cd_state.pre > 20) - cd_state.pre = 20; + if (cd_state.pre > CD_MAXLEN) + cd_state.pre = CD_MAXLEN; } /* Initialisation. Store and calculate the string and matches and so on. */ -- cgit 1.4.1