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