diff options
| author | Curtis McEnroe | 2018-08-04 15:04:48 -0400 | 
|---|---|---|
| committer | Curtis McEnroe | 2018-08-04 15:04:48 -0400 | 
| commit | 39507f0f8fb59b8574361835edff86f2b0efbcb9 (patch) | |
| tree | e114b7ed297cf6607d8fab4ba3c15695258292bd | |
| parent | 6e4f98d6eb3dee15a140647c033a87ca5e6c3064 (diff) | |
Handle terminal resizing
| -rw-r--r-- | chat.c | 7 | ||||
| -rw-r--r-- | ui.c | 34 | 
2 files changed, 26 insertions, 15 deletions
| @@ -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(); @@ -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); | 
