ucurses: Allow typical pattern for KEY_ESC detection.

This pattern makes use of nodelay curses mode, implement that.
pull/26/head
Paul Sokolovsky 2015-05-28 10:36:39 +03:00
rodzic 7cb60c33b8
commit d086d00b51
1 zmienionych plików z 23 dodań i 2 usunięć

Wyświetl plik

@ -1,5 +1,6 @@
import os
import tty, termios
import select
COLOR_BLACK = 0
COLOR_RED = 1
@ -54,7 +55,7 @@ KEY_QUIT = 1009
KEY_ENTER = 1010
KEY_BACKSPACE = 1011
KEY_DELETE = 1012
KEY_ESC = 1020
KEY_ESC = 0x1b
KEY_DC = KEY_DELETE
KEY_PPAGE = KEY_PGUP
@ -140,6 +141,7 @@ class Window:
self.bkgattr = A_NORMAL
self.keybuf = None
self.keyi = 0
self.keydelay = -1
def _goto(self, row, col):
_move(self.y + row, self.x + col)
@ -210,7 +212,13 @@ class Window:
pass
def timeout(self, delay):
assert delay < 0
self.keydelay = delay
def nodelay(self, yes):
if yes:
self.keydelay = 0
else:
self.keydelay = -1
def getch(self):
if self.keybuf and self.keyi < len(self.keybuf):
@ -218,6 +226,19 @@ class Window:
self.keyi += 1
return c
if self.keydelay >= 0:
USE_EPOLL = 1
if USE_EPOLL:
poll = select.epoll()
poll.register(0, select.EPOLLIN)
res = poll.poll(self.keydelay / 1000)
poll.unregister(0)
poll.close()
else:
res = select.select([0], [], [], self.keydelay / 1000)[0]
if not res:
return -1
key = os.read(0, 32)
if key[0] != 0x1b:
self.keybuf = key