From 601f47a2ebcc54c995359c6f87e0eed932329e89 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Tue, 26 Apr 2016 16:45:09 +0100 Subject: lineedit: move console viewport to cursor on keypress When a normal *nix terminal has been scrolled back through its buffer, any keypress will return to the cursor position. Add code to lineedit.c to do the same for the Windows console. --- include/mingw.h | 1 + libbb/lineedit.c | 5 +++++ win32/winansi.c | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/mingw.h b/include/mingw.h index f30338ba8..5faef41bf 100644 --- a/include/mingw.h +++ b/include/mingw.h @@ -154,6 +154,7 @@ int mingw_pclose(FILE *fd); * ANSI emulation wrappers */ +void move_cursor_row(int n); int winansi_putchar(int c); int winansi_puts(const char *s); size_t winansi_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); diff --git a/libbb/lineedit.c b/libbb/lineedit.c index 04361b509..e7b9ddfa1 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c @@ -2440,6 +2440,11 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman fflush_all(); ic = ic_raw = lineedit_read_key(read_key_buffer, timeout); +#if ENABLE_PLATFORM_MINGW32 + /* scroll to cursor position on any keypress */ + if (isatty(fileno(stdin)) && isatty(fileno(stdout))) + move_cursor_row(0); +#endif #if ENABLE_FEATURE_REVERSE_SEARCH again: diff --git a/win32/winansi.c b/win32/winansi.c index 5d4adbec8..ebe831593 100644 --- a/win32/winansi.c +++ b/win32/winansi.c @@ -125,7 +125,7 @@ static void erase_till_end_of_screen(void) } -static void move_cursor_row(int n) +void move_cursor_row(int n) { CONSOLE_SCREEN_BUFFER_INFO sbi; -- cgit v1.2.3-55-g6feb