From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11467 invoked from network); 4 Jan 2000 12:43:57 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 4 Jan 2000 12:43:57 -0000 Received: (qmail 2550 invoked by alias); 4 Jan 2000 12:43:51 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 9198 Received: (qmail 2543 invoked from network); 4 Jan 2000 12:43:50 -0000 Date: Tue, 4 Jan 2000 13:43:49 +0100 (MET) Message-Id: <200001041243.NAA02763@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: "Andrej Borsenkow"'s message of Sat, 25 Dec 1999 13:57:17 +0300 Subject: PATCH: Re: Arguments splitting (was: RE: PATCH: _cd not completing in $cdpath) Andrej Borsenkow wrote: > > _alternative re-evaluates arguments passed to it, so a string like > > '\(/home/pws /home/pws/tex\)' > > isn't good enough as a path for _path_files -W because it gets split on > > spaces, whereas _path_files needs it as a single argument. If that's the > > correct behaviour for _alternative --- and I suspect it is, because there > > are uses like > > _alternative 'files:: _files' 'parameters:: _parameters' > > --- then _cd needs fixing. > > > > It is correct, that arguments, that are command line, need splitting (to get at > this command line at all :-) But the current way to split them prevents any > arguments with embedded LFS characters. > > What about something like > > eval "action=( $action )" > > Then we could define > > _alternative 'files::_files -W "(a b c)"' > > i.e. just use usual quoting. Right. When I first wrote the stuff I wanted to avoid such a `eval'. That seems ridiculous nowadays... > Note, that this (possibly - I did not check the code) applies to _arguments, > _values etc - to any function, that is possibly using this format. It seems that > a single utility function/builtin to habdle such arguments is quite timely. I know that I started to do that at least once. But then found enough differences between them to make me stop doing that. So, the patch patches all three files without moving code into a helper function, but, unless I have forgotten something else, it should be possible (the different handling of `->state' actions may be a problem, but I don't really remember the problems I encountered). Bye Sven diff -ru ../z.old/Completion/Base/_arguments Completion/Base/_arguments --- ../z.old/Completion/Base/_arguments Tue Jan 4 13:22:22 2000 +++ Completion/Base/_arguments Tue Jan 4 13:32:05 2000 @@ -246,13 +246,14 @@ # If the action starts with a space, we just call it. - ${(e)=~action} + eval "action=( $action )" + "$action[@]" else # Otherwise we call it with the description-arguments built above. - action=( $=action ) - ${(e)action[1]} "$subopts[@]" "$expl[@]" ${(e)~action[2,-1]} + eval "action=( $action )" + "$action[1]" "$subopts[@]" "$expl[@]" "${(@)action[2,-1]}" fi fi fi diff -ru ../z.old/Completion/Base/_values Completion/Base/_values --- ../z.old/Completion/Base/_values Tue Jan 4 13:22:23 2000 +++ Completion/Base/_values Tue Jan 4 13:34:08 2000 @@ -130,13 +130,14 @@ # If the action starts with a space, we just call it. - ${(e)=~action} + eval "action=( $action )" + "$action[@]" else # Otherwise we call it with the description-arguments built above. - action=( $=action ) - ${(e)action[1]} "$subopts[@]" "$expl[@]" ${(e)~action[2,-1]} + eval "action=( $action )" + "$action[1]" "$subopts[@]" "$expl[@]" "${(@)action[2,-1]}" fi fi diff -ru ../z.old/Completion/Core/_alternative Completion/Core/_alternative --- ../z.old/Completion/Core/_alternative Tue Jan 4 13:22:30 2000 +++ Completion/Core/_alternative Tue Jan 4 13:35:01 2000 @@ -54,13 +54,14 @@ # If the action starts with a space, we just call it. - ${(e)=~action} + eval "action=( $action )" + "$action[@]" else # Otherwise we call it with the description-arguments built above. - action=( $=action ) - ${(e)action[1]} "$subopts[@]" "$expl[@]" ${(e)~action[2,-1]} + eval "action=( $action )" + "$action[1]" "$subopts[@]" "$expl[@]" "${(@)action[2,-1]}" fi fi done -- Sven Wischnowsky wischnow@informatik.hu-berlin.de