PATCH: hiding of specials and namerefs

Bart Schaefer <[email protected]> Fri, 24 Jul 2026 20:17:47 -0700
Newsgroups gmane.comp.shells.zsh.devel
Message-ID <CAH+w=7b1ABbVRAhtxW3iDtnh1g4Ea2mvjndy-aY2qAF-gv=cVA@mail.gmail.com>
--000000000000acfd89065766ef7b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Sun, Jul 19, 2026 at 1:34=E2=80=AFPM Bart Schaefer <schaefer@brasslanter=
n.com> wrote:
>
> -- `typeset -hn ...` is not allowed, but can be worked around, so
> probably should be allowed?
> -- the ZLE parameters are already implicitly local on entry to a
> widget function, so declaring them local again (even with -h) doesn't
> change anything without introducing another scope.

Attached patch addresses these.

On Wed, Jul 22, 2026 at 4:42=E2=80=AFPM Philippe Altherr
<[email protected]> wrote:
>
> [Regarding the second point above]
>
> I assume that -h is a rather rarely used flag. It's probably even more ra=
rely used in cases where it fails to hide the targeted parameter. So, while=
 an error changes the behavior, there are probably extremely few existing s=
cripts where this would make a difference. On the other hand, while you dev=
elop a new script, an error is somewhat more likely to grab your attention.

The patch makes this an error, and therefore I've updated the tests
after applying workers/55024 (pushed but not yet in ChangeLog).

I put the related code in an #if to make it easy to try either variation.

On Thu, Jul 23, 2026 at 7:12=E2=80=AFPM Philippe Altherr
<[email protected]> wrote:
>>
>> % typeset -gn SRANDOM
>> zsh: invalid variable name: zsh/random
>
> I have code that fixes this  -> changes the error to "SRANDOM: can't chan=
ge type of autoloaded parameter".

Given that mention, I've stopped short of digging into this myself,
this patch does not cover it.

--000000000000acfd89065766ef7b
Content-Type: text/plain; charset="US-ASCII"; name="hiding-specials-namerefs.txt"
Content-Disposition: attachment; filename="hiding-specials-namerefs.txt"
Content-Transfer-Encoding: base64
Content-ID: <f_mrzsm98o0>
X-Attachment-Id: f_mrzsm98o0

ZGlmZiAtLWdpdCBhL1NyYy9idWlsdGluLmMgYi9TcmMvYnVpbHRpbi5jCmluZGV4IDJlM2U1NzUy
YS4uNzlhNzY3OGFiIDEwMDY0NAotLS0gYS9TcmMvYnVpbHRpbi5jCisrKyBiL1NyYy9idWlsdGlu
LmMKQEAgLTIyMDksNiArMjIwOSwxNyBAQCB0eXBlc2V0X3NpbmdsZShjaGFyICpjbmFtZSwgY2hh
ciAqcG5hbWUsIFBhcmFtIHBtLCBpbnQgZnVuYywKIAkgICAgb24gfD0gUE1fRVhQT1JURUQ7CiAJ
Ki8KICAgICB9CisgICAgaWYgKHVzZXBtICYmIChvbiAmIFBNX0hJREUpICYmCisJKHBtLT5ub2Rl
LmZsYWdzICYgKFBNX1NQRUNJQUx8UE1fQVVUT0xPQUQpKSAmJgorCXBtLT5sZXZlbCA8PSBsb2Nh
bGxldmVsKSB7CisjaWYgMAorCXp3YXJubmFtKGNuYW1lLCAiJXM6IGNhbid0IGNoYW5nZSBwYXJh
bWV0ZXIgYXR0cmlidXRlIiwgcG5hbWUpOworCS8qIHJldHVybiBOVUxMOyAqLwkvKiB0aGlzIGhh
cyBhbHdheXMgYmVlbiBhIG5vLW9wICovCisjZWxzZQorCXplcnJuYW0oY25hbWUsICIlczogY2Fu
J3QgY2hhbmdlIHBhcmFtZXRlciBhdHRyaWJ1dGUiLCBwbmFtZSk7CisJcmV0dXJuIE5VTEw7CS8q
IHRoaXMgd2FzIHByZXZpb3VzbHkgYSBuby1vcCAqLworI2VuZGlmCisgICAgfQogCiAgICAgLyoK
ICAgICAgKiBBIHBhcmFtZXRlciB3aWxsIGJlIGxvY2FsIGlmCkBAIC0yNTE2LDggKzI1MjcsOCBA
QCB0eXBlc2V0X3NpbmdsZShjaGFyICpjbmFtZSwgY2hhciAqcG5hbWUsIFBhcmFtIHBtLCBpbnQg
ZnVuYywKIAlwbSA9IGNyZWF0ZXBhcmFtKHBuYW1lLCBvbiAmIH5QTV9SRUFET05MWSk7CiAJaWYg
KCFwbSkgewogCSAgICBpZiAob24gJiAoUE1fTEVGVCB8IFBNX1JJR0hUX0IgfCBQTV9SSUdIVF9a
IHwKLQkJICAgICAgUE1fSU5URUdFUiB8IFBNX0VGTE9BVCB8IFBNX0ZGTE9BVCkpCi0JCXplcnJu
YW0oY25hbWUsICJjYW4ndCBjaGFuZ2UgdmFyaWFibGUgYXR0cmlidXRlOiAlcyIsIHBuYW1lKTsK
KwkJICAgICAgUE1fSU5URUdFUiB8IFBNX0VGTE9BVCB8IFBNX0ZGTE9BVCB8IFBNX05BTUVSRUYp
KQorCQl6ZXJybmFtKGNuYW1lLCAiJXM6IGNhbid0IGNoYW5nZSBwYXJhbWV0ZXIgYXR0cmlidXRl
IiwgcG5hbWUpOwogCSAgICByZXR1cm4gTlVMTDsKIAl9CiAJaWYgKG9uICYgKFBNX0xFRlQgfCBQ
TV9SSUdIVF9CIHwgUE1fUklHSFRfWikpIHsKQEAgLTI2ODksMTQgKzI3MDAsMTQgQEAgYmluX3R5
cGVzZXQoY2hhciAqbmFtZSwgY2hhciAqKmFyZ3YsIExpbmtMaXN0IGFzc2lnbnMsIE9wdGlvbnMg
b3BzLCBpbnQgZnVuYykKIAllbHNlCiAJICAgIGNvbnRpbnVlOwogCWlmIChPUFRfTUlOVVMob3Bz
LCduJykpIHsKLQkgICAgaWYgKGJpdCAmIH4oUE1fUkVBRE9OTFl8UE1fVVBQRVJ8UE1fSElERVZB
TCkpIHsKKwkgICAgaWYgKGJpdCAmIH4oUE1fUkVBRE9OTFl8UE1fVVBQRVJ8UE1fSElERVZBTHxQ
TV9ISURFKSkgewogCQl6d2Fybm5hbShuYW1lLCAiLSVjIG5vdCBhbGxvd2VkIHdpdGggLW4iLCBv
cHR2YWwpOwogCQkvKiByZXR1cm4gMTsgKi8KIAkgICAgfQogCX0KICAgICB9CiAgICAgaWYgKE9Q
VF9NSU5VUyhvcHMsJ24nKSkgewotCWlmICgob258b2ZmKSAmIH4oUE1fUkVBRE9OTFl8UE1fVVBQ
RVJ8UE1fSElERVZBTCkpIHsKKwlpZiAoKG9ufG9mZikgJiB+KFBNX1JFQURPTkxZfFBNX1VQUEVS
fFBNX0hJREVWQUx8UE1fSElERSkpIHsKIAkgICAgLyogendhcm5uYW0obmFtZSwgIm5vIG90aGVy
IGF0dHJpYnV0ZXMgYWxsb3dlZCB3aXRoIC1uIik7ICovCiAJICAgIHJldHVybiAxOwogCX0KZGlm
ZiAtLWdpdCBhL1Rlc3QvQjAydHlwZXNldC56dHN0IGIvVGVzdC9CMDJ0eXBlc2V0Lnp0c3QKaW5k
ZXggZmU5ZWI1NWViLi5iNDVhZDAyN2YgMTAwNjQ0Ci0tLSBhL1Rlc3QvQjAydHlwZXNldC56dHN0
CisrKyBiL1Rlc3QvQjAydHlwZXNldC56dHN0CkBAIC0xMTMzLDkgKzExMzMsOSBAQAogIGVjaG8g
dj0ke1NSQU5ET00vPC0+L2ludGVnZXJ9CiAgdHlwZXNldCAtZ2ggU1JBTkRPTQogIGVjaG8gdj0k
e1NSQU5ET00vPC0+L2ludGVnZXJ9Ci0wOkdsb2JhbCAtaCB2YXJpYWJsZSBkb2Vzbid0IGhpZGUg
c3BlY2lhbCB2YXJpYWJsZQotPnY9aW50ZWdlcgorMTpHbG9iYWwgLWggdmFyaWFibGUgZG9lc24n
dCBoaWRlIHNwZWNpYWwgdmFyaWFibGUKID52PWludGVnZXIKKz8oZXZhbCk6dHlwZXNldDozOiBT
UkFORE9NOiBjYW4ndCBjaGFuZ2UgcGFyYW1ldGVyIGF0dHJpYnV0ZQogCiAgem1vZGxvYWQgLXUg
enNoL3JhbmRvbQogIGVjaG8gdj0ke1NSQU5ET00vPC0+L2ludGVnZXJ9CkBAIC0xMTY4LDEwICsx
MTY4LDkgQEAKICB0eXBlc2V0IC1naCBTUkFORE9NCiAgZWNobyB6PSR7KE0pJHsoZikkeyB6bW9k
bG9hZCAtYXB9fTojKlNSQU5ET00qfQogIGVjaG8gdj0ke1NSQU5ET00vPC0+L2ludGVnZXJ9Ci0w
Okdsb2JhbCAtaCB2YXJpYWJsZSBkb2Vzbid0IGhpZGUgYXV0b2xvYWQgdmFyaWFibGUKLT56PVNS
QU5ET00gKHpzaC9yYW5kb20pCisxOkdsb2JhbCAtaCB2YXJpYWJsZSBkb2Vzbid0IGhpZGUgYXV0
b2xvYWQgdmFyaWFibGUKID56PVNSQU5ET00gKHpzaC9yYW5kb20pCi0+dj1pbnRlZ2VyCis/KGV2
YWwpOnR5cGVzZXQ6MzogU1JBTkRPTTogY2FuJ3QgY2hhbmdlIHBhcmFtZXRlciBhdHRyaWJ1dGUK
IAogIHptb2Rsb2FkIC11IHpzaC9yYW5kb20KICBlY2hvIHo9JHsoTSkkeyhmKSR7IHptb2Rsb2Fk
IC1hcH19OiMqU1JBTkRPTSp9Cg==
--000000000000acfd89065766ef7b--