Coding style.

- Use a context manager for signal_handlers.
This commit is contained in:
Andrew Hamilton 2021-04-11 10:34:43 +10:00
parent cf95fa1088
commit 39bda8cafb

View file

@ -479,26 +479,31 @@ def on_terminal_input(screen_widget):
return screen_widget.on_input_event(code) # keyboard
@contextlib.contextmanager
def signal_handler(loop, signal_, func):
loop.add_signal_handler(signal_, func)
try:
yield
finally:
loop.remove_signal_handler(signal_)
@contextlib.contextmanager
def context(loop, appearance_changed_event, screen_widget, exit_loop=None):
appearance_changed_event.set()
if exit_loop is None:
exit_loop = loop.stop
loop.add_signal_handler(signal.SIGWINCH, lambda: draw_screen(screen_widget))
loop.add_signal_handler(signal.SIGINT, exit_loop)
loop.add_signal_handler(signal.SIGTERM, exit_loop)
try:
with terminal.alternate_buffer(), terminal.interactive(), \
terminal.mouse_tracking():
loop.add_reader(sys.stdin, on_terminal_input, screen_widget)
try:
yield
finally:
loop.remove_reader(sys.stdin)
finally:
loop.remove_signal_handler(signal.SIGWINCH)
loop.remove_signal_handler(signal.SIGINT)
loop.remove_signal_handler(signal.SIGTERM)
with signal_handler(loop, signal.SIGWINCH,
lambda: draw_screen(screen_widget)), \
signal_handler(loop, signal.SIGINT, exit_loop), \
signal_handler(loop, signal.SIGTERM, exit_loop), \
terminal.alternate_buffer(), terminal.interactive(), \
terminal.mouse_tracking():
loop.add_reader(sys.stdin, on_terminal_input, screen_widget)
try:
yield
finally:
loop.remove_reader(sys.stdin)
##########################