async def render(stdscr: 'curses._CursesWindow', slos: shelve.Shelf) -> None: q: 'asyncio.Queue[str]' = asyncio.Queue(maxsize=1) asyncio.create_task(tick(q)) asyncio.create_task(readio(stdscr, q)) state = State() while True: k = await q.get() if k == 'q': return state.handle(k) items = sorted(slos.values(), key=state.key, reverse=state.reverse) height, width = stdscr.getmaxyx() i = 0 stdscr.clear() for payload in items: if i >= height - 1 - len(payload.results): # TODO: pagination break stdscr.addstr(i, 0, payload.name) for result in payload.results: stdscr.addstr(i, width // 2, result.name) value = f'{result.value:.2f}' style = (1 if result.value >= 99.99 else 2 if result.value >= 99.9 else 3) stdscr.addstr(i, width - len(value) - 1, value, curses.color_pair(style)) i += 1 stdscr.addstr(i, 0, '') state.render_bar(stdscr, height - 1) stdscr.refresh()