Coding style.
- Use a context manager for signal_handlers.
This commit is contained in:
parent
cf95fa1088
commit
39bda8cafb
1 changed files with 20 additions and 15 deletions
|
|
@ -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(), \
|
||||
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)
|
||||
finally:
|
||||
loop.remove_signal_handler(signal.SIGWINCH)
|
||||
loop.remove_signal_handler(signal.SIGINT)
|
||||
loop.remove_signal_handler(signal.SIGTERM)
|
||||
|
||||
|
||||
##########################
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue