+
+ k = kreader.getch()
+ if k is None:
+ rotate_nya = rotate_nya[1:3] + rotate_nya[0]
+ continue
+
+ if k == 'q':
+ break
+
+#---------- individual keystroke input ----------
+
+class DummyKeystrokeReader:
+ def __init__(self,fd,timeout_dummy): pass
+ def stop(self): pass
+ def getch(self): sleep(1); return None
+ def info(self): return ' [noninteractive]'
+
+class KeystrokeReader(DummyKeystrokeReader):
+ def __init__(self, fd, timeout_decisec=0):
+ self._fd = fd
+ self._saved = termios.tcgetattr(fd)
+ a = termios.tcgetattr(fd)
+ a[3] &= ~(termios.ECHO | termios.ECHONL |
+ termios.ICANON | termios.IEXTEN)
+ a[6][termios.VMIN] = 0
+ a[6][termios.VTIME] = timeout_decisec
+ termios.tcsetattr(fd, termios.TCSANOW, a)
+ def stop(self):
+ termios.tcsetattr(self._fd, termios.TCSANOW, self._saved)
+ def getch(self):
+ debug_flush()
+ byte = os.read(self._fd, 1)
+ if not len(byte): return None
+ return byte
+ def info(self):
+ return ''