The following completion functions give different highlighting results in the zle: _tst() { compadd -S '<SUFFIX>' -q -- '' } _tst() { compadd -S '<SUFFIX>' -r '' -- '' } _tst() { compadd -S '<SUFFIX>' -R '' -- '' } With the first two functions, <SUFFIX> correctly gets highlighted as autoremovable. However, with the third function, <SUFFIX> does not get highlighted, even though it is autoremovable.
On Tue, Sep 7, 2021 at 3:07 AM Marlon Richert <marlon.richert@gmail.com> wrote: > > _tst() { compadd -S '<SUFFIX>' -q -- '' } > _tst() { compadd -S '<SUFFIX>' -r '' -- '' } > _tst() { compadd -S '<SUFFIX>' -R '' -- '' } > > With the first two functions, <SUFFIX> correctly gets highlighted as > autoremovable. However, with the third function, <SUFFIX> does not get > highlighted, even though it is autoremovable. -R is supposed to be followed by the name of a function. You gave it the empty string. That should probably have been an error right off the bat, but it does mean the suffix can't possibly be autoremoved. However, the same highlight behavior occurs even if you do supply a working subroutine. Does anyone remember why suffixfunclen needed to be stored separately? diff --git a/Src/Zle/zle_misc.c b/Src/Zle/zle_misc.c index 612ac2138..eba28d1ec 100644 --- a/Src/Zle/zle_misc.c +++ b/Src/Zle/zle_misc.c @@ -1508,9 +1508,6 @@ static struct suffixset *suffixlist; /**/ static char *suffixfunc; -/* Length associated with the suffix function */ -static int suffixfunclen; - /* Whether to remove suffix on uninsertable characters */ /**/ int suffixnoinsrem; @@ -1611,7 +1608,7 @@ makesuffixstr(char *f, char *s, int n) if (f) { zsfree(suffixfunc); suffixfunc = ztrdup(f); - suffixfunclen = n; + suffixlen = n; } else if (s) { int inv, i, z = 0; ZLE_STRING_T ws, lasts, wptr; @@ -1685,7 +1682,7 @@ iremovesuffix(ZLE_INT_T c, int keep) unmetafy_line(); } - sprintf(buf, "%d", suffixfunclen); + sprintf(buf, "%d", suffixlen); addlinknode(args, suffixfunc); addlinknode(args, buf); @@ -1800,5 +1797,5 @@ fixsuffix(void) suffixlist = next; } - suffixfunclen = suffixnoinsrem = suffixlen = 0; + suffixnoinsrem = suffixlen = 0; }
On 9/8/21, Bart Schaefer <schaefer@brasslantern.com> wrote:
> On Tue, Sep 7, 2021 at 3:07 AM Marlon Richert <marlon.richert@gmail.com>
> wrote:
>>
>> _tst() { compadd -S '<SUFFIX>' -q -- '' }
>> _tst() { compadd -S '<SUFFIX>' -r '' -- '' }
>> _tst() { compadd -S '<SUFFIX>' -R '' -- '' }
>>
>> With the first two functions, <SUFFIX> correctly gets highlighted as
>> autoremovable. However, with the third function, <SUFFIX> does not get
>> highlighted, even though it is autoremovable.
>
> -R is supposed to be followed by the name of a function. You gave it
> the empty string. That should probably have been an error right off
> the bat, but it does mean the suffix can't possibly be autoremoved.
>
> However, the same highlight behavior occurs even if you do supply a
> working subroutine. Does anyone remember why suffixfunclen needed to
> be stored separately?
I didn't make any attempt to understand the code, but can you usefully
specify both -r and -R? (it doesn't appear to be an error).
--
Mikael Magnusson
On Tue, Sep 7, 2021 at 7:13 PM Mikael Magnusson <mikachu@gmail.com> wrote:
>
> On 9/8/21, Bart Schaefer <schaefer@brasslantern.com> wrote:
> > Does anyone remember why suffixfunclen needed to
> > be stored separately?
>
> I didn't make any attempt to understand the code, but can you usefully
> specify both -r and -R? (it doesn't appear to be an error).
You mean in the same call to compadd ? Sure. The argument passed to
-r just determines when to invoke the function, it doesn't provide a
different suffix.