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 (;;) {
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();

34
ui.c
View File

@ -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);