diff options
author | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2018-04-04 18:33:00 +0100 |
---|---|---|
committer | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2018-04-04 18:33:00 +0100 |
commit | 3517e4a9a5caf2c3385a0b223a0474724c703d96 (patch) | |
tree | d75e40e0bdcbd9baa10b858703a1c8ea47ed2385 /Src | |
parent | 1bd2ecc17d74b6a8ffba97806cf90ef706d7411b (diff) | |
download | zsh-3517e4a9a5caf2c3385a0b223a0474724c703d96.tar.gz zsh-3517e4a9a5caf2c3385a0b223a0474724c703d96.tar.xz zsh-3517e4a9a5caf2c3385a0b223a0474724c703d96.zip |
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.
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 */ |