diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/hist.c | 22 | ||||
-rw-r--r-- | Src/lex.c | 2 | ||||
-rw-r--r-- | Src/zsh.h | 1 |
3 files changed, 24 insertions, 1 deletions
diff --git a/Src/hist.c b/Src/hist.c index 177250f31..e08984f00 100644 --- a/Src/hist.c +++ b/Src/hist.c @@ -46,6 +46,9 @@ void (*hwaddc) _((int)); void (*hwbegin) _((int)); /**/ +void (*hwabort) _((void)); + +/**/ void (*hwend) _((void)); /**/ @@ -250,6 +253,7 @@ hist_context_save(struct hist_stack *hs, int toplevel) hs->hungetc = hungetc; hs->hwaddc = hwaddc; hs->hwbegin = hwbegin; + hs->hwabort = hwabort; hs->hwend = hwend; hs->addtoline = addtoline; hs->hlinesz = hlinesz; @@ -294,6 +298,7 @@ hist_context_restore(const struct hist_stack *hs, int toplevel) hungetc = hs->hungetc; hwaddc = hs->hwaddc; hwbegin = hs->hwbegin; + hwabort = hs->hwabort; hwend = hs->hwend; addtoline = hs->addtoline; hlinesz = hs->hlinesz; @@ -986,6 +991,11 @@ nohw(UNUSED(int c)) } static void +nohwabort(void) +{ +} + +static void nohwe(void) { } @@ -1057,6 +1067,7 @@ hbegin(int dohist) hungetc = inungetc; hwaddc = nohw; hwbegin = nohw; + hwabort = nohwabort; hwend = nohwe; addtoline = nohw; } else { @@ -1066,6 +1077,7 @@ hbegin(int dohist) hungetc = ihungetc; hwaddc = ihwaddc; hwbegin = ihwbegin; + hwabort = ihwabort; hwend = ihwend; addtoline = iaddtoline; if (!isset(BANGHIST)) @@ -1571,6 +1583,16 @@ ihwbegin(int offset) chwords[chwordpos++] = hptr - chline + offset; } +/* Abort current history word, not needed */ + +/**/ +void +ihwabort(void) +{ + if (chwordpos%2) + chwordpos--; +} + /* add a word to the history List */ /**/ diff --git a/Src/lex.c b/Src/lex.c index c2a59661c..2379804f2 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -677,7 +677,7 @@ gettok(void) (char *)hcalloc(lexbuf.siz = LEX_HEAP_SIZE); add(c); } - hwend(); + hwabort(); while ((c = ingetc()) != '\n' && !lexstop) { hwaddc(c); addtoline(c); diff --git a/Src/zsh.h b/Src/zsh.h index 92f75769a..ba2f8cd9f 100644 --- a/Src/zsh.h +++ b/Src/zsh.h @@ -2992,6 +2992,7 @@ struct hist_stack { void (*hungetc) _((int)); void (*hwaddc) _((int)); void (*hwbegin) _((int)); + void (*hwabort) _((void)); void (*hwend) _((void)); void (*addtoline) _((int)); unsigned char *cstack; |