From fd476d8629d489245e18ec278d3c846ab1359eec Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Tue, 26 Apr 2016 11:12:42 +0100 Subject: libbb/lineedit: scroll to cursor position on any keypress Also improve erase_till_end_of_screen. Based on suggestions from GitHub user avih. --- win32/winansi.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) (limited to 'win32') diff --git a/win32/winansi.c b/win32/winansi.c index 78d5d5f5c..ebe831593 100644 --- a/win32/winansi.c +++ b/win32/winansi.c @@ -109,31 +109,23 @@ static void erase_in_line(void) static void erase_till_end_of_screen(void) { CONSOLE_SCREEN_BUFFER_INFO sbi; - COORD pos; - DWORD dummy; + DWORD dummy, len; if (!console) return; GetConsoleScreenBufferInfo(console, &sbi); - FillConsoleOutputCharacterA(console, ' ', - sbi.dwSize.X - sbi.dwCursorPosition.X, sbi.dwCursorPosition, + len = sbi.dwSize.X - sbi.dwCursorPosition.X + + sbi.dwSize.X * (sbi.srWindow.Bottom - sbi.dwCursorPosition.Y); + + FillConsoleOutputCharacterA(console, ' ', len, sbi.dwCursorPosition, &dummy); - FillConsoleOutputAttribute(console, plain_attr, - sbi.dwSize.X - sbi.dwCursorPosition.X, sbi.dwCursorPosition, + FillConsoleOutputAttribute(console, plain_attr, len, sbi.dwCursorPosition, &dummy); - pos.X = 0; - for (pos.Y = sbi.dwCursorPosition.Y+1; pos.Y <= sbi.srWindow.Bottom; - pos.Y++) { - FillConsoleOutputCharacterA(console, ' ', sbi.dwSize.X, - pos, &dummy); - FillConsoleOutputAttribute(console, plain_attr, sbi.dwSize.X, - pos, &dummy); - } } -static void move_cursor_row(int n) +void move_cursor_row(int n) { CONSOLE_SCREEN_BUFFER_INFO sbi; -- cgit v1.2.3-55-g6feb