diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/hist.c | 22 | ||||
-rw-r--r-- | Src/lex.c | 2 |
2 files changed, 21 insertions, 3 deletions
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 */ |