[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: sh-mode highlight issue
From: |
Wayne Cuddy |
Subject: |
Re: sh-mode highlight issue |
Date: |
Mon, 31 Jan 2022 15:20:14 +0000 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
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.
Many thanks as usual,
Wayne