import curses import asyncio import sys class Console(): def __init__(self): self.stdscr = curses.initscr() def __enter__(self): curses.noecho() curses.cbreak() self.stdscr.keypad(True) return self def __exit__(self, *_): curses.nocbreak() self.stdscr.keypad(False) curses.echo() curses.endwin() async def start(c, on_str, on_tab): string = "" while True: char = await asyncio.to_thread(c.stdscr.getkey) if char == '\n': await on_str(string) string = "" elif char == '\t': await on_tab() else: string += char