From c094ebce077e89b77c877de509c8f5303d1a58ba Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 9 Jun 2018 11:17:12 +0530 Subject: [PATCH] Set VMIN to 1 as without it poll() returns immediately even when no data is available to read on macOS --- kittens/tui/loop.py | 5 ++++- kitty/data-types.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kittens/tui/loop.py b/kittens/tui/loop.py index 0141b39e7..4195bd7cc 100644 --- a/kittens/tui/loop.py +++ b/kittens/tui/loop.py @@ -275,7 +275,10 @@ class Loop: handler.write_buf[self.iov_limit - 1] = b''.join(handler.write_buf[self.iov_limit - 1:]) del handler.write_buf[self.iov_limit:] sizes = tuple(map(len, handler.write_buf)) - written = os.writev(fd, handler.write_buf) + try: + written = os.writev(fd, handler.write_buf) + except BlockingIOError: + return if not written: raise EOFError('The output stream is closed') if written >= sum(sizes): diff --git a/kitty/data-types.c b/kitty/data-types.c index 8ad1d3b06..a74cecd8a 100644 --- a/kitty/data-types.c +++ b/kitty/data-types.c @@ -108,7 +108,7 @@ static inline bool put_tty_in_raw_mode(int fd, const struct termios* termios_p) { struct termios raw_termios = *termios_p; cfmakeraw(&raw_termios); - raw_termios.c_cc[VMIN] = 0; raw_termios.c_cc[VTIME] = 0; + raw_termios.c_cc[VMIN] = 1; raw_termios.c_cc[VTIME] = 0; if (tcsetattr(fd, TCSAFLUSH, &raw_termios) != 0) { PyErr_SetFromErrno(PyExc_OSError); return false; } return true; }