about summary refs log tree commit diff
path: root/ui.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-08-04 15:04:48 -0400
committerJune McEnroe <june@causal.agency>2018-08-04 15:04:48 -0400
commit39507f0f8fb59b8574361835edff86f2b0efbcb9 (patch)
treee114b7ed297cf6607d8fab4ba3c15695258292bd /ui.c
parentHandle /names and /who (diff)
downloadcatgirl-39507f0f8fb59b8574361835edff86f2b0efbcb9.tar.gz
catgirl-39507f0f8fb59b8574361835edff86f2b0efbcb9.zip
Handle terminal resizing
Diffstat (limited to 'ui.c')
-rw-r--r--ui.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/ui.c b/ui.c
index a8e40d9..c8f53ff 100644
--- a/ui.c
+++ b/ui.c
@@ -71,6 +71,12 @@ void uiInit(void) {
 	ui.input = newpad(2, INPUT_COLS);
 	mvwhline(ui.input, 0, 0, ACS_HLINE, INPUT_COLS);
 	wmove(ui.input, 1, 0);
+	nodelay(ui.input, true);
+}
+
+static void uiResize(void) {
+	wresize(ui.chat, CHAT_LINES, COLS);
+	wmove(ui.chat, CHAT_LINES - 1, COLS - 1);
 }
 
 void uiHide(void) {
@@ -194,19 +200,21 @@ void uiRead(void) {
 	static size_t len;
 
 	wint_t ch;
-	wget_wch(ui.input, &ch);
-	switch (ch) {
-		break; case '\b': case '\177': {
-			if (len) len--;
-		}
-		break; case '\n': {
-			if (!len) break;
-			buf[len] = '\0';
-			input(buf);
-			len = 0;
-		}
-		break; default: {
-			if (iswprint(ch)) buf[len++] = ch;
+	while (wget_wch(ui.input, &ch) != ERR) {
+		switch (ch) {
+			break; case KEY_RESIZE: uiResize();
+			break; case '\b': case '\177': {
+				if (len) len--;
+			}
+			break; case '\n': {
+				if (!len) break;
+				buf[len] = '\0';
+				input(buf);
+				len = 0;
+			}
+			break; default: {
+				if (iswprint(ch)) buf[len++] = ch;
+			}
 		}
 	}
 	wmove(ui.input, 1, 0);