* parameter substitution used in _values
@ 2001-06-01 13:14 Oliver Kiddle
2001-06-01 13:39 ` Sven Wischnowsky
0 siblings, 1 reply; 4+ messages in thread
From: Oliver Kiddle @ 2001-06-01 13:14 UTC (permalink / raw)
To: zsh-workers
Any ideas why the difference between using $1 and $a here below:
% set -- '-Opath'
% a="$1"
% echo ${(@P)1[3,-1]}
9XZfims
% echo ${(@P)a[3,-1]}
/usr/lib/jdk1.3/bin /usr/bin /bin ... etc ...
I'm guessing that the 9XZfims is the list of single letter options but
why that and not the value of $path? This stuff is used at the beginning
of _values where it parses its options so it looks to me like _values
won't work with no space between -O and its argument.
Oliver
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: parameter substitution used in _values
2001-06-01 13:14 parameter substitution used in _values Oliver Kiddle
@ 2001-06-01 13:39 ` Sven Wischnowsky
2001-06-01 14:21 ` Oliver Kiddle
2001-06-01 15:01 ` Bart Schaefer
0 siblings, 2 replies; 4+ messages in thread
From: Sven Wischnowsky @ 2001-06-01 13:39 UTC (permalink / raw)
To: zsh-workers
Oliver Kiddle wrote:
> Any ideas why the difference between using $1 and $a here below:
>
> % set -- '-Opath'
> % a="$1"
> % echo ${(@P)1[3,-1]}
> 9XZfims
> % echo ${(@P)a[3,-1]}
> /usr/lib/jdk1.3/bin /usr/bin /bin ... etc ...
>
> I'm guessing that the 9XZfims is the list of single letter options but
> why that and not the value of $path? This stuff is used at the beginning
> of _values where it parses its options so it looks to me like _values
> won't work with no space between -O and its argument.
Oh rats.
The problem is that the positional parameters are internally turned into
`$argv[n]'. And, as one can see,
% a=(-opath)
% echo ${(@P)a[1][3,-1]}
doesn't `work' either. The reason is that fetchvalue() applies only one
subscript level, so the second fetchvalue() for the P flags doesn't get
`path' in those cases.
Obviously I wasn't aware of that and I don;t like it either, but see no
simple fix (for the C-code).
In the shell code we have to use `${(@P)${1[1,3]}}' for now. Oliver, if
you have your hands in there anyway, could you?
Bye
Sven
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: parameter substitution used in _values
2001-06-01 13:39 ` Sven Wischnowsky
@ 2001-06-01 14:21 ` Oliver Kiddle
2001-06-01 15:01 ` Bart Schaefer
1 sibling, 0 replies; 4+ messages in thread
From: Oliver Kiddle @ 2001-06-01 14:21 UTC (permalink / raw)
To: zsh-workers
Sven Wischnowsky wrote:
>
> The problem is that the positional parameters are internally turned into
> `$argv[n]'. And, as one can see,
Ah, that explains.
> In the shell code we have to use `${(@P)${1[1,3]}}' for now. Oliver, if
> you have your hands in there anyway, could you?
Okay. I assume you meant ${(@P)${1[3,-1]}} and this change does that and
the same for a similar piece of code in _arguments. I was looking at
using zparseopts to handle more options but I won't change it to that
this close to the release.
Does `opt' need to be declared local in _values for any reason or is
that some old leftover?
Oliver
Index: Base/Utility/_arguments
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Base/Utility/_arguments,v
retrieving revision 1.6
diff -u -r1.6 _arguments
--- Base/Utility/_arguments 2001/05/31 12:38:34 1.6
+++ Base/Utility/_arguments 2001/06/01 14:13:20
@@ -178,7 +178,7 @@
case "$1" in
-C) usecc=yes; shift ;;
-O) subopts=( "${(@P)2}" ); shift 2 ;;
- -O*) subopts=( "${(@P)1[3,-1]}" ); shift ;;
+ -O*) subopts=( "${(@P)${1[3,-1]}}" ); shift ;;
-R) rawret=yes; shift;;
-w) optarg=yes; shift;;
-s) singopt=(-s); shift;;
Index: Base/Utility/_values
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Base/Utility/_values,v
retrieving revision 1.3
diff -u -r1.3 _values
--- Base/Utility/_values 2001/05/31 08:18:37 1.3
+++ Base/Utility/_values 2001/06/01 14:13:20
@@ -7,7 +7,7 @@
case "$1" in
-C) usecc=yes; shift ;;
-O) subopts=( "${(@P)2}" ); shift 2 ;;
- *) subopts=( "${(@P)1[3,-1]}" ); shift ;;
+ *) subopts=( "${(@P)${1[3,-1]}}" ); shift ;;
esac
done
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: parameter substitution used in _values
2001-06-01 13:39 ` Sven Wischnowsky
2001-06-01 14:21 ` Oliver Kiddle
@ 2001-06-01 15:01 ` Bart Schaefer
1 sibling, 0 replies; 4+ messages in thread
From: Bart Schaefer @ 2001-06-01 15:01 UTC (permalink / raw)
To: zsh-workers
On Jun 1, 3:39pm, Sven Wischnowsky wrote:
} Subject: Re: parameter substitution used in _values
}
} The problem is that the positional parameters are internally turned into
} `$argv[n]'.
This is a bit strange on many levels:
zsh% noargv() { unset argv }
zsh% showargv() {
function> echo 1=$1 2=$2 @=\($@\) argv=\($argv\) $+argv
function> noargv
function> echo 1=$1 2=$2 @=\($@\) argv=\($argv\) $+argv
function> unset argv
function> echo 1=$1 2=$2 @=\($@\) argv=\($argv\) $+argv
function> }
zsh% showargv a b c d
1=a 2=b @=(a b c d) argv=(a b c d) 1
1=a 2=b @=(a b c d) argv=() 0
1= 2= @=() argv=() 0
So `unset argv' somehow did something with a param that was already unset.
Now run `showargv' a second time in the same shell:
zsh% showargv d c b a
1=d 2=c @=(d c b a) argv=() 0
1=d 2=c @=(d c b a) argv=() 0
1= 2= @=() argv=() 0
This is sort of documented:
argv <S> <Z>
Same as *. Assigning to argv changes the local positional
parameters, but argv is *not* itself a local parameter. Deleting
argv with unset in any function deletes it everywhere, although
only the innermost positional parameter array is deleted (so * and
@ in other scopes are not affected).
It seems a bit odd that `unset argv' continues to have side effects after
argv has already been "deleted" but I guess that's just part of it being
<S>pecial.
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2001-06-01 15:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-01 13:14 parameter substitution used in _values Oliver Kiddle
2001-06-01 13:39 ` Sven Wischnowsky
2001-06-01 14:21 ` Oliver Kiddle
2001-06-01 15:01 ` Bart Schaefer
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).