From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18059 invoked from network); 26 Jul 2000 08:38:16 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 26 Jul 2000 08:38:16 -0000 Received: (qmail 15922 invoked by alias); 26 Jul 2000 08:38:10 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 12378 Received: (qmail 15914 invoked from network); 26 Jul 2000 08:38:09 -0000 Date: Wed, 26 Jul 2000 10:38:07 +0200 (MET DST) Message-Id: <200007260838.KAA13160@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: "Bart Schaefer"'s message of Tue, 25 Jul 2000 15:05:26 +0000 Subject: PATCH: Re: _arguments parsing of --help output Bart Schaefer wrote: > On Jul 24, 10:52am, Sven Wischnowsky wrote: > } Subject: Re: _arguments parsing of --help output > } > } Bart Schaefer wrote: > } > } > Many GNU commands include short options in the --help output as well > } > [...] > } > Is there a reason that we don't attempt to complete the short forms? > } > } _arguments '-e:ea:(1 2)' -e -b -p > } > } This will make `foo -e ' complete `1' and `2' but `foo -' lists > } both (with auto-descriptions). > > I don't understand here what you mean by "`foo -' lists both". With: zstyle ':completion:*:option(-*|s)' auto-description 'specify %d' and Case 1 below `tst ' gives: % tst -- --e -- specify ea --b --e --p I.e. --e is listed twice, the first one is the `--e:ea:(1 2)' and the second one is the auto-detected one. Should we make _arguments use only the first, last or most `specifc' one (`most specific' could mean that it describes more arguments than the other specs for that same option)? > ... > > _tst() { _arguments -- '*--e:ea:(1 2)' } # Case 3 > > In combination with: > > tst() { print -l - --e --b --p } > compdef _tst tst > > ... > > Case 2: Completion after `tst' lists --e --b --p and completion after > `tst --e' completes `--' and then lists --b and --p; 1 or 2 are never > completed. > > Case 3: Exactly like Case 2. > > So case 1 behaves as I expected, and case 3 appears to be broken. (I > also tried '*e:ea:(1 2)' and a few other patterns.) I'm not sure what > I should be expecting from case 2. The same as from the second case. The problem was that _arguments only used those specs after the `--' for options described (in the --help output) by something containing an equal sign (`--out=FILE' or some such). The patch below changes that. The descriptions are used as they are, i.e. in the example above `tst --e ' works, but `tst --e=' does not. I think this is right. I think I could be convinced otherwise. Bye Sven Index: Completion/Base/_arguments =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Base/_arguments,v retrieving revision 1.27 diff -u -r1.27 _arguments --- Completion/Base/_arguments 2000/05/31 06:11:08 1.27 +++ Completion/Base/_arguments 2000/07/26 08:36:35 @@ -142,11 +142,16 @@ cache=( "$cache[@]" "${(@)^tmpo}=${dir}${descr}" ) fi - # Everything else is just added as an option without arguments. + # Everything else is just added as an option without arguments or + # as described by $descr. if (( $#tmp )); then tmp=("${(@)tmp//[^a-zA-Z0-9-]}") - cache=( "$cache[@]" "$tmp[@]" ) + if [[ -n "$descr" ]]; then + cache=( "$cache[@]" "${(@)^tmp}${descr}" ) + else + cache=( "$cache[@]" "$tmp[@]" ) + fi fi done set -A "$name" "${(@)cache:# #}" -- Sven Wischnowsky wischnow@informatik.hu-berlin.de