From c93eb1a95b1f06c145d4169a8776a318a2085e8b Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Wed, 20 Apr 2022 09:23:30 +0100 Subject: [PATCH] vi: fix backspace over tab in commands Colon and search commands are entered on the status line. Since the cursor position wasn't being tracked backspacing over a tab resulted in a mismatch between the actual and apparent content of the command. function old new delta get_input_line 178 180 +2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 2/0) Total: 2 bytes Signed-off-by: Ron Yorston Signed-off-by: Bernhard Reutner-Fischer --- editors/vi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/editors/vi.c b/editors/vi.c index 4257c0fdc..6fa0a4e18 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -1217,10 +1217,11 @@ static char *get_input_line(const char *prompt) break; // this is end of input if (isbackspace(c)) { // user wants to erase prev char - write1("\b \b"); // erase char on screen buf[--i] = '\0'; + go_bottom_and_clear_to_eol(); if (i <= 0) // user backs up before b-o-l, exit break; + write1(buf); } else if (c > 0 && c < 256) { // exclude Unicode // (TODO: need to handle Unicode) buf[i] = c;