about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/inputwin.c22
1 files changed, 22 insertions, 0 deletions
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
@@ -366,12 +366,34 @@ inp_block(void)
 }
 
 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)
 {
     int col = offset_to_col(line, offset);
     werase(inp_win);
     waddstr(inp_win, line);
     wmove(inp_win, 0, col);
+    inp_win_handle_scroll();
+
     _inp_win_update_virtual();
 }