Handle terminal resizing
parent
6e4f98d6eb
commit
39507f0f8f
7
chat.c
7
chat.c
|
@ -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
34
ui.c
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue