zsh-workers
 help / color / mirror / code / Atom feed
From: Daniel Shahaf <d.s@daniel.shahaf.name>
To: Zsh hackers list <zsh-workers@zsh.org>
Cc: Marlon Richert <marlon.richert@gmail.com>
Subject: Re: Feature Patch: Use completion to view parameter values
Date: Mon, 29 Mar 2021 18:14:52 +0000	[thread overview]
Message-ID: <20210329181452.GB6044@tarpaulin.shahaf.local2> (raw)
In-Reply-To: <CAH+w=7bD9bA-AKV4NoQ9YZVM_VpSMgX8GcLjSVhgP06KYokM_A@mail.gmail.com>

Bart Schaefer wrote on Mon, Mar 29, 2021 at 10:20:08 -0700:
> On Mon, Mar 29, 2021 at 10:11 AM Daniel Shahaf <d.s@daniel.shahaf.name> wrote:
> >
> > I think that's right.  -workers@: Is it possible for a non-PM_SPECIAL
> > parameter have a custom getfn?
> 
> Only with the zsh/param/private module, I think, and in that case the
> getfn is just a wrapper around the default and doesn't add any
> side-effects.

Thanks, Bart.

And as to $AUTOINCREMENT, this isn't the first time I mentioned it as
a hypothetical, so I'm going to go ahead and post it here.  I suspect
people from the future will use this for something-or-other.

Works as you'd expect:
.
    % echo $AUTOINCREMENT $AUTOINCREMENT
    0 1
    % 

And in Marlon's patch with the ${(t)…*special*} exclusion bypassed:
.
    % zstyle \* extra-verbose yes
    % AUTOFOO=42
    % echo $AUTO<TAB><TAB>
    AUTOFOO       -- 42  AUTOINCREMENT -- 2
    AUTOFOO       -- 42  AUTOINCREMENT -- 4

Yes, it does actually increment the variable twice, probably because the
_parameters patch uses both ${(t)${(P)}} and then ${(P)}, and the former
does an increment too:
.
    % echo $AUTOINCREMENT ${(tP)AUTOINCREMENT} $AUTOINCREMENT 
    0 array-special 2
    %

I'm not proposing to commit $AUTOINCREMENT.

Cheers,

Daniel

P.S.  Another similar example is Perl's magic flip-flop variable:
«perl -E 'say --$| for (1..10)'»


diff --git a/Src/Modules/parameter.c b/Src/Modules/parameter.c
index ef9148d7b..179ac068e 100644
--- a/Src/Modules/parameter.c
+++ b/Src/Modules/parameter.c
@@ -2136,6 +2136,24 @@ scanpmusergroups(UNUSED(HashTable ht), ScanFunc func, int flags)
 }
 
 
+/* Functions for the AUTOINCREMENT special parameter. */
+
+static zlong autoincrement = 0;
+
+static zlong
+autoincrementgetfn(UNUSED(Param pm))
+{
+    return autoincrement++;
+}
+
+static void
+autoincrementsetfn(UNUSED(Param pm), zlong value)
+{
+    autoincrement = value;
+}
+
+
+
 /* Table for defined parameters. */
 
 struct pardef {
@@ -2192,8 +2210,13 @@ static const struct gsu_array dirs_gsu =
 static const struct gsu_array historywords_gsu =
 { histwgetfn, arrsetfn, stdunsetfn };
 
+static const struct gsu_integer autoincrement_gsu =
+{ autoincrementgetfn, autoincrementsetfn, stdunsetfn };
+
 /* Make sure to update autofeatures in parameter.mdd if necessary */
 static struct paramdef partab[] = {
+    SPECIALPMDEF("AUTOINCREMENT", PM_SPECIAL | PM_INTEGER,
+	    &autoincrement_gsu, NULL, NULL),
     SPECIALPMDEF("aliases", 0,
 	    &pmraliases_gsu, getpmralias, scanpmraliases),
     SPECIALPMDEF("builtins", PM_READONLY_SPECIAL, NULL, getpmbuiltin, scanpmbuiltins),
diff --git a/Src/Modules/parameter.mdd b/Src/Modules/parameter.mdd
index f71c17a72..b8fb93d54 100644
--- a/Src/Modules/parameter.mdd
+++ b/Src/Modules/parameter.mdd
@@ -2,6 +2,6 @@ name=zsh/parameter
 link=either
 load=yes
 
-autofeatures="p:parameters p:commands p:functions p:dis_functions p:functions_source p:dis_functions_source p:funcfiletrace p:funcsourcetrace p:funcstack p:functrace p:builtins p:dis_builtins p:reswords p:dis_reswords p:patchars p:dis_patchars p:options p:modules p:dirstack p:history p:historywords p:jobtexts p:jobdirs p:jobstates p:nameddirs p:userdirs p:usergroups p:aliases p:dis_aliases p:galiases p:dis_galiases p:saliases p:dis_saliases"
+autofeatures="p:parameters p:commands p:functions p:dis_functions p:functions_source p:dis_functions_source p:funcfiletrace p:funcsourcetrace p:funcstack p:functrace p:builtins p:dis_builtins p:reswords p:dis_reswords p:patchars p:dis_patchars p:options p:modules p:dirstack p:history p:historywords p:jobtexts p:jobdirs p:jobstates p:nameddirs p:userdirs p:usergroups p:aliases p:dis_aliases p:galiases p:dis_galiases p:saliases p:dis_saliases p:AUTOINCREMENT"
 
 objects="parameter.o"


  reply	other threads:[~2021-03-29 18:15 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-28 20:53 Marlon Richert
2021-03-29  7:39 ` Daniel Shahaf
2021-03-29 11:55   ` Marlon Richert
2021-03-29 17:11     ` Daniel Shahaf
2021-03-29 17:20       ` Bart Schaefer
2021-03-29 18:14         ` Daniel Shahaf [this message]
2021-03-29 20:00           ` Marlon Richert
2021-03-29 20:05             ` Daniel Shahaf
2021-03-29 20:35               ` Marlon Richert
2021-04-01  4:28                 ` Marlon Richert
2021-04-01 18:40                   ` Daniel Shahaf
2021-04-02  0:50                 ` Oliver Kiddle
2021-04-10 20:20                   ` Lawrence Velázquez
2021-04-11 20:06                     ` Marlon Richert
2021-04-11 21:24                     ` Patch bumping (was Re: Feature Patch: Use completion to view parameter values) Bart Schaefer
2021-04-12  8:18                       ` Marlon
2021-04-13 12:32                         ` Daniel Shahaf
2021-04-13 18:08                           ` Lawrence Velázquez
2021-04-15  9:39                             ` [META] Tone of voice / Writing style in patch reviews (was Re: Patch bumping) Marlon
2021-04-15 10:33                               ` zeurkous
2021-04-13 13:35                         ` Patch bumping (was Re: Feature Patch: Use completion to view parameter values) Daniel Shahaf
2021-04-13 21:31                           ` Lawrence Velázquez
2021-04-13 21:50                             ` Bart Schaefer
2021-04-14 12:52                             ` Daniel Shahaf
2021-04-13  2:47                       ` Lawrence Velázquez
2021-04-12 20:22                   ` Feature Patch: Use completion to view parameter values Marlon
2021-04-12 21:49                     ` Bart Schaefer
2021-04-13  4:50                       ` Marlon Richert
2021-03-30  5:41           ` Mikael Magnusson
2021-03-31 22:55             ` Daniel Shahaf
2021-03-31 23:03               ` Daniel Shahaf
2021-03-29 20:10         ` Peter Stephenson
2021-03-29 11:48 ` Mikael Magnusson
2021-03-29 12:06   ` Marlon Richert
2021-03-29 12:07     ` Marlon Richert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210329181452.GB6044@tarpaulin.shahaf.local2 \
    --to=d.s@daniel.shahaf.name \
    --cc=marlon.richert@gmail.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).