diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index 083b6c4e..ee800e56 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -365,6 +365,26 @@ inp_block(void) wtimeout(inp_win, -1); } +void +inp_win_handle_scroll(void) +{ + int col = getcurx(inp_win); + int wcols = getmaxx(stdscr); + + // if lost cursor off screen, move contents to show it + if (col >= pad_start + (wcols -2)) { + pad_start = col - (wcols / 2); + if (pad_start < 0) { + pad_start = 0; + } + } else if (col <= pad_start) { + pad_start = pad_start - (wcols / 2); + if (pad_start < 0) { + pad_start = 0; + } + } +} + void inp_write(char *line, int offset) { @@ -372,6 +392,8 @@ inp_write(char *line, int offset) werase(inp_win); waddstr(inp_win, line); wmove(inp_win, 0, col); + inp_win_handle_scroll(); + _inp_win_update_virtual(); }