X-Git-Url: https://plomlompom.com/repos/?p=plomrogue2;a=blobdiff_plain;f=plomrogue_client%2Ftui.py;fp=plomrogue_client%2Ftui.py;h=9f28a04c542ba586ad3650679c43c70b3fd24734;hp=7cfc01139c35a8cbb75aa0039640fc353b98a109;hb=b69f30da99f9096834f4389a13dd4ffac26e7a80;hpb=d9970cdde3a9f232efbfcacae0217b63e8389551 diff --git a/plomrogue_client/tui.py b/plomrogue_client/tui.py index 7cfc011..9f28a04 100644 --- a/plomrogue_client/tui.py +++ b/plomrogue_client/tui.py @@ -3,10 +3,17 @@ import curses +class AbortOnGetkey(Exception): + pass + + + class TUI: def __init__(self): self._log = [] + self.do_refresh = True + self.store_widechar = False curses.wrapper(self.run_loop) def addstr(self, y, x, line, attr=0): @@ -35,11 +42,32 @@ class TUI: self.stdscr = stdscr self.init_loop() while True: - self.loop() + try: + self.loop() + except AbortOnGetkey: + continue + self.do_refresh = True def log(self, msg): self._log += [msg] + self.do_refresh = True + def get_key_and_keycode(self): + try: + key = self.stdscr.getkey() + except curses.error: + raise AbortOnGetkey + keycode = None + if len(key) == 1: + keycode = ord(key) + # workaround for + if self.store_widechar: + self.store_widechar = False + key = bytes([195, keycode]).decode() + if keycode == 195: + self.store_widechar = True + raise AbortOnGetkey + return key, keycode def msg_into_lines_of_width(msg, width):