From 3517e4a9a5caf2c3385a0b223a0474724c703d96 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Wed, 4 Apr 2018 18:33:00 +0100 Subject: 42581(?): Fix ZLE inline history expansion. Seen with magic-space. If there's a parse error in command subtitution we need to complete reading history to ensure the command line buffer is finished. --- Src/hist.c | 22 ++++++++++++++++++++-- Src/lex.c | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'Src') diff --git a/Src/hist.c b/Src/hist.c index b798be8e4..dbdc1e4e5 100644 --- a/Src/hist.c +++ b/Src/hist.c @@ -465,8 +465,26 @@ herrflush(void) { inpopalias(); - while (!lexstop && inbufct && !strin) - hwaddc(ingetc()); + if (lexstop) + return; + /* + * The lex_add_raw test is needed if we are parsing a command + * substitution when expanding history for ZLE: strin is set but we + * need to finish off the input because the string we are reading is + * going to be used directly in the line that goes to ZLE. + * + * Note that this is a side effect --- this is not the usual reason + * for testing lex_add_raw which is to add the text to a different + * buffer used when we are actually parsing the command substituion + * (nothing to do with ZLE). Sorry. + */ + while (inbufct && (!strin || lex_add_raw)) { + int c = ingetc(); + if (!lexstop) { + hwaddc(c); + addtoline(c); + } + } } /* diff --git a/Src/lex.c b/Src/lex.c index 2379804f2..44ad88043 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -158,7 +158,7 @@ mod_export int nocomments; /* add raw input characters while parsing command substitution */ /**/ -static int lex_add_raw; +int lex_add_raw; /* variables associated with the above */ -- cgit 1.4.1