diff options
-rw-r--r-- | chat.c | 7 | ||||
-rw-r--r-- | ui.c | 34 |
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); |