summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCurtis McEnroe2018-08-04 15:04:48 -0400
committerCurtis McEnroe2018-08-04 15:04:48 -0400
commit39507f0f8fb59b8574361835edff86f2b0efbcb9 (patch)
treee114b7ed297cf6607d8fab4ba3c15695258292bd
parent6e4f98d6eb3dee15a140647c033a87ca5e6c3064 (diff)
Handle terminal resizing
-rw-r--r--chat.c7
-rw-r--r--ui.c34
2 files changed, 26 insertions, 15 deletions
diff --git a/chat.c b/chat.c
index dc45312..ab0d4d7 100644
--- a/chat.c
+++ b/chat.c
@@ -80,8 +80,11 @@ int main(int argc, char *argv[]) {
};
for (;;) {
int nfds = poll(fds, 2, -1);
- if (nfds < 0 && errno == EINTR) continue;
- if (nfds < 0) err(EX_IOERR, "poll");
+ if (nfds < 0) {
+ if (errno != EINTR) err(EX_IOERR, "poll");
+ fds[0].revents = POLLIN;
+ fds[1].revents = 0;
+ }
if (fds[0].revents) uiRead();
if (fds[1].revents) clientRead();
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);