From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10656 invoked from network); 25 Jul 2001 14:48:20 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 25 Jul 2001 14:48:20 -0000 Received: (qmail 10540 invoked by alias); 25 Jul 2001 14:48:10 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 15487 Received: (qmail 10528 invoked from network); 25 Jul 2001 14:48:09 -0000 From: Sven Wischnowsky Date: Wed, 25 Jul 2001 16:47:39 +0200 (MET DST) Message-Id: <200107251447.QAA19199@beta.informatik.hu-berlin.de> To: zsh-workers@sunsite.dk Subject: Re: ** matcher In-Reply-To: <000e01c1150e$9500fd40$21c9ca95@mow.siemens.ru> Borsenkow Andrej wrote: > With this style > > zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' '+r:|[._-]=** r:|=**' > > the following does not match > > bor@itsrm2% gdiff --i-lTAB > > but the following does > > bor@itsrm2% gdiff --i--lTAB > bor@itsrm2% gdiff --ignore-blank-lines > Completing option > --ignore-blank-lines -- ignore lines that are all blank > --ignore-matching-lines -- ignore lines that match regex > > Why? Because that pattern-matching-before-calling-compdescribe has to come in the loop (otherwise the matchers returned by _next_label won't be used). And I found a buglet in bin_compadd() where using `--' before the matches made any -M be ignored. Bye Sven Index: Completion/Base/Utility/_describe =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Base/Utility/_describe,v retrieving revision 1.5 diff -u -r1.5 _describe --- Completion/Base/Utility/_describe 2001/07/25 12:18:24 1.5 +++ Completion/Base/Utility/_describe 2001/07/25 14:46:12 @@ -5,6 +5,7 @@ local _opt _expl _tmpm _tmpd local _type=values _descr _ret=1 _showd _nm _hide _args _grp _sep local csl="$compstate[list]" csl2 +local _oargv _argv _new _strs _mats _opts _i _try=0 # Get the option. @@ -25,55 +26,17 @@ zstyle -s ":completion:${curcontext}:$_type" list-separator _sep || _sep=-- -if zstyle -T ":completion:${curcontext}:$_type" list-grouped; then - local _argv _new _strs _mats _opts _i=2 +_descr="$1" +shift - _argv=( "$@" ) +if [[ -n "$showd" ]] && + zstyle -T ":completion:${curcontext}:$_type" list-grouped; then + _oargv=( "$@" ) _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 -_descr="$1" -shift - [[ "$_type" = options ]] && zstyle -t ":completion:${curcontext}:options" prefix-hidden && _hide="${(M)PREFIX##(--|[-+])}" @@ -81,6 +44,47 @@ _tags "$_type" while _tags; do while _next_label "$_type" _expl "$_descr"; do + + if (( $#_grp )); then + + set -- "$_oargv[@]" + _argv=( "$_oargv[@]" ) + _i=1 + (( _try++ )) + while (( $# )); do + + _strs="_a_$_try$_i" + eval local "_a_$_try$_i;_a_$_try$_i"'=( "${'$1'[@]}" )' + _argv[_i]="_a_$_try$_i" + shift + (( _i++ )) + + if [[ "$1" = (|-*) ]]; then + _mats= + else + _matss="_a_$_try$_i" + eval local "_a_$_try$_i;_a_$_try$_i"'=( "${'$1'[@]}" )' + _argv[_i]="_a_$_try$_i" + shift + (( _i++ )) + fi + + _opts=( "${(@)argv[1,(i)--]:#--}" ) + shift "$#_opts" + (( _i += $#_opts )) + if [[ $1 == -- ]]; then + shift + (( _i++ )) + fi + + if [[ -n $_mats ]]; then + compadd "$_opts[@]" "$_expl[@]" -O $_strs -D $_mats -s $_strs + else + compadd "$_opts[@]" "$_expl[@]" -O $_strs -a $_strs + fi + done + set - "$_argv[@]" + fi if [[ -n "$_showd" ]]; then compdescribe -I "$_hide" "$_sep " _expl "$_grp[@]" "$@" Index: Src/Zle/complete.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/complete.c,v retrieving revision 1.17 diff -u -r1.17 complete.c --- Src/Zle/complete.c 2001/07/25 08:52:34 1.17 +++ Src/Zle/complete.c 2001/07/25 14:46:14 @@ -616,13 +616,14 @@ } } } + + ca_args: + if (mstr && (match = parse_cmatcher(name, mstr)) == pcm_err) { zsfree(mstr); return 1; } zsfree(mstr); - - ca_args: if (!*argv && !dat.group && !dat.mesg && !(dat.aflags & (CAF_NOSORT|CAF_UNIQALL|CAF_UNIQCON|CAF_ALL))) -- Sven Wischnowsky wischnow@informatik.hu-berlin.de