diff options
Diffstat (limited to 'cursed.py')
| -rw-r--r-- | cursed.py | 37 |
1 files changed, 22 insertions, 15 deletions
@@ -3,8 +3,10 @@ import asyncio import sys class Console(): - def __init__(self): + def __init__(self, messages): self.stdscr = curses.initscr() + self.messages = messages + self.typed_message = "" def __enter__(self): curses.noecho() @@ -18,24 +20,29 @@ class Console(): curses.echo() curses.endwin() - def redraw(self, messages): + def redraw(self): self.stdscr.clear() - for msg in messages: + for msg in self.messages: self.stdscr.addstr(msg + '\n') + if self.typed_message != "": + self.stdscr.addstr(self.typed_message) self.stdscr.refresh() -async def start(c, on_str, on_tab, messages): - string = "" - c.redraw(messages) +async def start(c, on_str, on_tab): while True: - char = await asyncio.to_thread(c.stdscr.getkey) - if char == '\n' and string != "": - await on_str(string) - messages.append(string) - c.redraw(messages) - string = "" - elif char == '\t': - await on_tab() + c.redraw() + char = await asyncio.to_thread(c.stdscr.get_wch) + if isinstance(char, str): + if char == '\n': + if c.typed_message != "": + await on_str(c.typed_message) + c.messages.append(c.typed_message) + c.typed_message = "" + elif char == '\t': + await on_tab() + else: + c.typed_message += char else: - string += char + if char == 263: + c.typed_message = c.typed_message[:-1] |
