[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: sh-mode highlight issue
From: |
Thomas Dickey |
Subject: |
Re: sh-mode highlight issue |
Date: |
Mon, 31 Jan 2022 15:38:57 -0500 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Mon, Jan 31, 2022 at 03:20:14PM +0000, Wayne Cuddy via discussions
concerning the vile text editor wrote:
> On Sun, Jan 30, 2022 at 03:45:15PM -0500, Thomas Dickey wrote:
> > On Sat, Jan 29, 2022 at 04:09:09PM -0500, Thomas Dickey wrote:
> > > On Sat, Jan 29, 2022 at 07:51:53PM +0000, Wayne Cuddy via discussions
> > > concerning the vile text editor wrote:
> > > > I'm not sure if this has been reported before, please forgive me if
> > > > this is repetitious.
> > > >
> > > > I'm running 9.8t and have not had a chance to upgrade to the
> > > > latest/greatest yet but I don't see mention of this issue being
> > > > corrected in the changelog. The closest I could find was comments from
> > > > 9.7y:
> > > >
> > > > + improve vile-sh-filt for these cases:
> > > > + "${number}"
> > > > + "$(commands)"
> > > > + "$((expression))"
> > > > + "${name#value}", etc.
> > > >
> > > >
> > > > The issue concerns $((expression)) expansions in variable assignments,
> > > > but may not be limited to just this case.
> > > >
> > > > var="prefix$((5*5))suffix"
> > > ^ string
> > > ^expression
> > > ^ string?
> > > >
> > > > prefix appears correctly highlighted, suffix does not, it seems the
> > > > syntax highlighting terminates after the final ')' character.
> > >
> > > Just looking at the source, the line
> > >
> > > <EXPRS>{BACKTIC2_UP} { handle_backtic2(yytext, yyleng,
> > > LEN_BACKTIC2_DOWN, 0); }
> > >
> > > is probably what should trigger on the "))", which takes it into
> > >
> > > if (FLTSTACK_OK && (which <= 0) && (FLTSTACK_THIS.backtic == test)) {
> > >
> > > and fails there for some reason -- otherwise it would go back to the
> > > string/literal coloring.
> > >
> > > (I'm in the middle of ncurses, but may dig into it tomorrow to get a
> > > better
> > > answer).
> >
> > See attached
> >
> > --
> > Thomas E. Dickey <dickey@invisible-island.net>
> > https://invisible-island.net
> > ftp://ftp.invisible-island.net
>
> > --- sh-filt.l 2021/12/12 01:26:53 1.183
> > +++ sh-filt.l 2022/01/30 20:27:01
> > @@ -70,6 +70,7 @@
> > static void handle_backtic2(const char *text, int length, int test, int
> > which);
> > static void handle_backtic1(const char *text, int length, int test, int
> > which);
> > static void handle_parens(const char *text, int length, int test, int
> > which, int state);
> > +static void resume_state(void);
> > static void save_here(const char *text, int length);
> > static void write_vname(const char *text, int length);
> >
> > @@ -198,8 +199,10 @@
> > FLEX_PRINTF((stderr, "cannot pop '$((' level %d\n",
> > stk_level));
> > if (!pop_backtic1(yytext, 1, LEN_BACKTIC1_DOWN)) {
> > FLEX_PRINTF((stderr, "cannot pop '$(' level
> > %d\n", stk_level));
> > - if (FLTSTACK_OK && stk_state[stk_level-1].state
> > == NORMAL)
> > + if (FLTSTACK_OK && stk_state[stk_level-1].state
> > == NORMAL) {
> > pop_state();
> > + resume_state();
> > + }
> > flt_putc(R_PAREN);
> > }
> > unput(R_PAREN);
> > @@ -213,8 +216,10 @@
> > }
> > <NORMAL>{BACKTIC1_UP} { if (!pop_backtic1(yytext, yyleng,
> > LEN_BACKTIC1_DOWN)) {
> > FLEX_PRINTF((stderr, "cannot pop '$(' level %d\n",
> > stk_level));
> > - if (FLTSTACK_OK && stk_state[stk_level-1].state ==
> > NORMAL)
> > + if (FLTSTACK_OK && stk_state[stk_level-1].state ==
> > NORMAL) {
> > pop_state();
> > + resume_state();
> > + }
> > ECHO;
> > }
> > }
> > @@ -293,6 +298,7 @@
> > <KSH_MATH>"))" {
> > WriteToken(Action_attr);
> > pop_state();
> > + resume_state();
> > }
> > <KSH_MATH>{IDENT1} |
> > <KSH_MATH>{VNAME} { WriteToken(Ident_attr); }
> > @@ -312,6 +318,7 @@
> > flt_bfr_append("'", 1);
> > flt_bfr_finish();
> > pop_state();
> > + resume_state();
> > }
> > <KSH_CQUOTE>\\[0-7]{1,3} {
> > flt_bfr_embed(yytext, 1, Action_attr);
> > @@ -874,6 +881,7 @@
> > flt_bfr_append(value + used, length - used);
> > flt_bfr_finish();
> > pop_state();
> > + resume_state();
> > FreeAndNull(here_tag);
> > here_exp = 0;
> > here_next = 0;
>
> I'll make time to upgrade and test this patch later this week and post
> the results.
sounds good. Actually I didn't have anything in my collection of scripts
which I could have used to see this bug, and other using the test-case
which I constructed, saw no differences in output.
> Many thanks as usual,
no problem (I started working on a markdown filter, but can see that
xterm's going to use up this week).
--
Thomas E. Dickey <dickey@invisible-island.net>
https://invisible-island.net
ftp://ftp.invisible-island.net
signature.asc
Description: PGP signature