From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2939 invoked from network); 10 Mar 2000 09:01:44 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 10 Mar 2000 09:01:44 -0000 Received: (qmail 26306 invoked by alias); 10 Mar 2000 09:01:29 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 10040 Received: (qmail 26295 invoked from network); 10 Mar 2000 09:01:29 -0000 Date: Fri, 10 Mar 2000 10:01:09 +0100 (MET) Message-Id: <200003100901.KAA02760@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: "Andrej Borsenkow"'s message of Fri, 10 Mar 2000 10:02:58 +0300 Subject: RE: GNU diff completion problem Andrej Borsenkow wrote: > ... > > > } I have system default diff and GNU diff as gdiff. Current state does not > > } allow me to complete GNU diff at all > > > > You want > > > > compdef _diff gdiff > > zstyle ':completion:*:*:gdiff:*:version' command gdiff -v > > > > Nope. I do want > > compdef _diff diff gdiff > > without bothering, if GNU diff is installed as main or additional program. The above will > cover 99.9% of installations. > > I agree with the point, that _diff_options can be called in context without actual > command. But it simply means, that _diff_options should not test diff version itself, but > just get a "diff kind" parameter. Actual testing is to be done by _diff. No it isn't. Or else we would have to do it in every function that calls _diff_options. How about this patch? It makes _diff_is_gnu an assoc of $words[1] and it makes $words[1] be used as the command if it matches *diff. That last part -- or at least the pattern -- may have to be changed: are there other commands ending in `diff' that are not real diffs and that may be in $words[1] when _diff_options is used? Bye Sven diff -ru ../z.old/Completion/User/_diff_options Completion/User/_diff_options --- ../z.old/Completion/User/_diff_options Thu Mar 9 15:47:15 2000 +++ Completion/User/_diff_options Fri Mar 10 09:53:31 2000 @@ -1,14 +1,24 @@ #autoload -local of ofwuc ouc oss ofwy ofwg ofwl +local of ofwuc ouc oss ofwy ofwg ofwl cmd -(( $+_diff_is_gnu )) || { - _diff_is_gnu=0; - [[ $(_call version diff -v /dev/null) == *GNU* ]] && _diff_is_gnu=1 -} +(( $+_diff_is_gnu )) || typeset -gA _diff_is_gnu -if (( _diff_is_gnu )) -then +if (( ! $+_diff_is_gnu[$words[1]] )); then + if [[ "$words[1]" = *diff ]]; then + cmd="$words[1]" + else + cmd=diff + fi + + if [[ $(_call version $cmd -v /dev/null) = *GNU* ]]; then + _diff_is_gnu[$words[1]]=yes + else + _diff_is_gnu[$words[1]]= + fi +fi + +if [[ -n "$_diff_is_gnu[$words[1]]" ]]; then # output formats of="-y --side-by-side -n --rcs -e -f --ed -q --brief -c -C --context -u -U \ --unified --old-group-format --new-group-format --changed-group-format \ -- Sven Wischnowsky wischnow@informatik.hu-berlin.de