Handle terminal resizing

weechat-hashes
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();

10
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,8 +200,9 @@ 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 KEY_RESIZE: uiResize();
break; case '\b': case '\177': { break; case '\b': case '\177': {
if (len) len--; if (len) len--;
} }
@ -209,6 +216,7 @@ void uiRead(void) {
if (iswprint(ch)) buf[len++] = ch; if (iswprint(ch)) buf[len++] = ch;
} }
} }
}
wmove(ui.input, 1, 0); wmove(ui.input, 1, 0);
waddnwstr(ui.input, buf, len); waddnwstr(ui.input, buf, len);
wclrtoeol(ui.input); wclrtoeol(ui.input);