Handle terminal resizing

master
Curtis McEnroe 2018-08-04 15:04:48 -04:00
parent 6e4f98d6eb
commit 39507f0f8f
No known key found for this signature in database
GPG Key ID: CEA2F97ADCFCD77C
2 changed files with 26 additions and 15 deletions

7
chat.c
View File

@ -80,8 +80,11 @@ int main(int argc, char *argv[]) {
}; };
for (;;) { for (;;) {
int nfds = poll(fds, 2, -1); int nfds = poll(fds, 2, -1);
if (nfds < 0 && errno == EINTR) continue; if (nfds < 0) {
if (nfds < 0) err(EX_IOERR, "poll"); if (errno != EINTR) err(EX_IOERR, "poll");
fds[0].revents = POLLIN;
fds[1].revents = 0;
}
if (fds[0].revents) uiRead(); if (fds[0].revents) uiRead();
if (fds[1].revents) clientRead(); if (fds[1].revents) clientRead();

34
ui.c
View File

@ -71,6 +71,12 @@ void uiInit(void) {
ui.input = newpad(2, INPUT_COLS); ui.input = newpad(2, INPUT_COLS);
mvwhline(ui.input, 0, 0, ACS_HLINE, INPUT_COLS); mvwhline(ui.input, 0, 0, ACS_HLINE, INPUT_COLS);
wmove(ui.input, 1, 0); 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) { void uiHide(void) {
@ -194,19 +200,21 @@ void uiRead(void) {
static size_t len; static size_t len;
wint_t ch; wint_t ch;
wget_wch(ui.input, &ch); while (wget_wch(ui.input, &ch) != ERR) {
switch (ch) { switch (ch) {
break; case '\b': case '\177': { break; case KEY_RESIZE: uiResize();
if (len) len--; break; case '\b': case '\177': {
} if (len) len--;
break; case '\n': { }
if (!len) break; break; case '\n': {
buf[len] = '\0'; if (!len) break;
input(buf); buf[len] = '\0';
len = 0; input(buf);
} len = 0;
break; default: { }
if (iswprint(ch)) buf[len++] = ch; break; default: {
if (iswprint(ch)) buf[len++] = ch;
}
} }
} }
wmove(ui.input, 1, 0); wmove(ui.input, 1, 0);