Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [PATCH] Fix WATCH/watch tying
- X-seq: zsh-workers 54383
- From: Philippe Altherr <philippe.altherr@xxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: Re: [PATCH] Fix WATCH/watch tying
- Date: Tue, 21 Apr 2026 23:07:54 +0200
- Arc-authentication-results: i=1; mx.google.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=QiPhgRjJjXtXBTNC/ouvscduP/indh6UEvXW3v5mLkk=; fh=BgAYDYpL6Ne/A5nWEMVJiHiBtrz8Imz3uf26RDwgQX4=; b=UxwCCMmCjTRi+TnJDTXoc0KM51gMR0K3AIySuo1mc3tYyUj7bOhm2MEGSsaA6Uk0aL GdRLC5+8pUqcPDQseSwC3SyspLT3ooRvL9BmheRyleaS88vqKomktBA5XrY1SNJyh1Gc 7P26SThh7lcpI05vh1Hc/bMi6AjA6Sioo321f4qMHKFQbJIJFLUSqHOt04PWNqDbilKf qP+hA8C9G3E+bj9laqCcOUftNvLraTvGOjn5EKAPW7CcJM3/eVKFTHVfoUltQMbeKspZ uIUrX81SihpMSKqMW+/wPfJlnq9omzCdAkfOElubOaJ7BtnsJfdqyXuhlWK3w/u9skhz Tb0g==; darn=zsh.org
- Arc-seal: i=1; a=rsa-sha256; t=1776805686; cv=none; d=google.com; s=arc-20240605; b=i0cuCEceBBAV+6dxu+p0Fal0Iz5/tFbsXTCn3sN3Y4Iw9vZRm9bZvbAxLTxs7VBiMF M9x3oLUEX7Js+uDg2MBqQ5I5tila5itE76x+kri4baRkbMw1vXdZAXZ3D+/lYfqOgf93 2clqDT1T46Lgb3ALYXK/DH2JMqu9jhIIF+exnuX1ndUAL7icbNE3Zlk9HILV0UDJp6h1 b2zeRGNmm+7l07GoD6sFyIwtHlqfkraEGuYkdMPjfocOEM3Fiacb06oToVUMomZa2Wjt Dl7FODmV5QUqjWnjMp8RzLyyoG/pXFbvZv9mUBrPRKBW+8IEDKAbyKVro4DhrR3t8pc/ jolw==
- Archived-at: <https://zsh.org/workers/54383>
- In-reply-to: <CAGdYchu8=ReJosUGYFs5Jp7tFHCsm-3iJQOpK72H3XShsNVsPg@mail.gmail.com>
- List-id: <zsh-workers.zsh.org>
- References: <CAGdYchvS7FYPj2+4O4wmG_N-PPXjAD4AbmetA3fZH26YadCB4Q@mail.gmail.com> <CAHYJk3S+R8OW8PfbGTpu8X5gFsuUfU=W6CRNNMqv_TbtGZt1pg@mail.gmail.com> <CAGdYchu8=ReJosUGYFs5Jp7tFHCsm-3iJQOpK72H3XShsNVsPg@mail.gmail.com>
It turns out that I have to duplicate the string returned by casemodify. Here is an updated version:
-
Fix WATCH/watch tying
Philippe
diff --git a/Src/Modules/watch.c b/Src/Modules/watch.c
index bb27ab9db..f23819b25 100644
--- a/Src/Modules/watch.c
+++ b/Src/Modules/watch.c
@@ -695,8 +695,10 @@ static struct builtin bintab[] = {
};
static struct paramdef partab[] = {
- PARAMDEF("WATCH", PM_SCALAR|PM_SPECIAL, &watch, NULL),
- PARAMDEF("watch", PM_ARRAY|PM_SPECIAL, &watch, NULL),
+ PARAMDEF("WATCH", PM_SCALAR|PM_SPECIAL|PM_TIED, &watch,
+ NULL /* &colonarr_gsu (see setup_()) */),
+ PARAMDEF("watch", PM_ARRAY|PM_SPECIAL|PM_TIED, &watch,
+ NULL /* &vararray_gsu (see setup_() */),
};
static struct features module_features = {
@@ -739,15 +741,6 @@ boot_(UNUSED(Module m))
{
static char const * const default_watchfmt = DEFAULT_WATCHFMT;
- Param pma = (Param) paramtab->getnode(paramtab, "watch");
- Param pms = (Param) paramtab->getnode(paramtab, "WATCH");
- if (pma && pms && pma->u.arr == watch && pms->u.arr == watch) {
- /* only tie the two parameters if both were added */
- pma->ename = "WATCH";
- pms->ename = "watch";
- pma->node.flags |= PM_TIED;
- pms->node.flags |= PM_TIED;
- }
watch = mkarray(NULL);
/* These two parameters are only set to defaults if not set.
diff --git a/Src/module.c b/Src/module.c
index 659bc3544..0b5cd5649 100644
--- a/Src/module.c
+++ b/Src/module.c
@@ -1085,6 +1085,9 @@ addparamdef(Paramdef d)
*/
switch (PM_TYPE(pm->node.flags)) {
case PM_SCALAR:
+ if (pm->node.flags & PM_TIED)
+ pm->ename = ztrdup(casemodify(pm->node.nam, CASMOD_LOWER));
+ /* fall-through */
case PM_NAMEREF:
pm->gsu.s = d->gsu ? (GsuScalar)d->gsu : &varscalar_gsu;
break;
@@ -1099,6 +1102,8 @@ addparamdef(Paramdef d)
break;
case PM_ARRAY:
+ if (pm->node.flags & PM_TIED)
+ pm->ename = ztrdup(casemodify(pm->node.nam, CASMOD_UPPER));
pm->gsu.a = d->gsu ? (GsuArray)d->gsu : &vararray_gsu;
break;
diff --git a/Test/V01zmodload.ztst b/Test/V01zmodload.ztst
index daf49cd72..ec55e0f95 100644
--- a/Test/V01zmodload.ztst
+++ b/Test/V01zmodload.ztst
@@ -236,6 +236,17 @@
fi
0d:Autoload a module via a math function
+ if [[ $mods[(r)zsh/watch] == zsh/watch ]]; then
+ zmodload -u zsh/watch
+ WATCH=foo:bar
+ typeset -p WATCH watch
+ else
+ ZTST_skip="zsh/watch module not available"
+ fi
+0:Autoload tied parameters
+>typeset -g -T WATCH watch=( foo bar )
+>typeset -g -aT WATCH watch=( foo bar )
+
# Test module aliases
zmodload -A example=zsh/example
Messages sorted by:
Reverse Date,
Date,
Thread,
Author