From: Christian Heller Date: Mon, 6 Oct 2025 22:12:31 +0000 (+0200) Subject: Ensure Terminal context manager actually gets to finish (i.e. turn cursor visible... X-Git-Url: https://plomlompom.com/repos/%7B%7Btodo.comment%7D%7D?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=ircplom Ensure Terminal context manager actually gets to finish (i.e. turn cursor visible again) on ExceptionEvent. --- diff --git a/src/run.py b/src/run.py index 90c03cd..0c54b38 100755 --- a/src/run.py +++ b/src/run.py @@ -5,10 +5,11 @@ from pathlib import Path from queue import SimpleQueue from sys import argv, exit as sys_exit +from typing import Optional # non-standard libs from plomlib.setup import dependency_hint try: - from ircplom.events import ExceptionEvent, QuitEvent + from ircplom.events import CrashingException, ExceptionEvent, QuitEvent from ircplom.client import ClientsDb, ClientEvent, NewClientEvent from ircplom.tui_base import BaseTui, Terminal, TerminalInterface, TuiEvent from ircplom.client_tui import ClientTui @@ -23,6 +24,7 @@ def main_loop(cls_term: type[TerminalInterface], cls_tui: type[BaseTui] q_events: SimpleQueue = SimpleQueue() clients_db: ClientsDb = {} try: + to_raise: Optional[CrashingException] = None with cls_term(_q_out=q_events).setup() as term: tui = cls_tui(_q_out=q_events, term=term) while True: @@ -30,13 +32,16 @@ def main_loop(cls_term: type[TerminalInterface], cls_tui: type[BaseTui] if isinstance(event, QuitEvent): break if isinstance(event, ExceptionEvent): - raise event.exception + to_raise = event.exception + break if isinstance(event, TuiEvent): event.affect(tui) elif isinstance(event, NewClientEvent): event.affect(clients_db) elif isinstance(event, ClientEvent): event.affect(clients_db[event.client_id]) + if to_raise: + raise to_raise finally: for client in clients_db.values(): client.close()