summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Proskurin <69064459+proskur1n@users.noreply.github.com>2023-03-28 19:11:32 +0200
committerGitHub <noreply@github.com>2023-03-28 19:11:32 +0200
commit6040833ae1dd41b96ab5b226debffa8c47b66569 (patch)
treeae6f87f4ab6a9c15eea0a888dd406a0d72b56a81
parent3e6b5e6576cc2d3b06b25689d8a3c05cb4a98ae2 (diff)
downloadurwid-6040833ae1dd41b96ab5b226debffa8c47b66569.tar.gz
fix: restore normal screen on ctrl-z (#477)
-rw-r--r--urwid/raw_display.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/urwid/raw_display.py b/urwid/raw_display.py
index 4c90a68..087d30e 100644
--- a/urwid/raw_display.py
+++ b/urwid/raw_display.py
@@ -140,34 +140,40 @@ class Screen(BaseScreen, RealTerminal):
self._resized = True
self.screen_buf = None
+ def _sigtstp_handler(self, signum, frame=None):
+ self.stop() # sets SIGTSTP handler to SIG_DFL
+ self.signal_handler_setter(signal.SIGCONT, self._sigcont_handler)
+ os.kill(os.getpid(), signal.SIGTSTP)
+
def _sigcont_handler(self, signum, frame=None):
"""
frame -- will always be None when the GLib event loop is being used.
"""
- self.stop()
+ self.signal_restore()
self.start()
self._sigwinch_handler(None, None)
def signal_init(self):
"""
Called in the startup of run wrapper to set the SIGWINCH
- and SIGCONT signal handlers.
+ and SIGTSTP signal handlers.
Override this function to call from main thread in threaded
applications.
"""
self.signal_handler_setter(signal.SIGWINCH, self._sigwinch_handler)
- self.signal_handler_setter(signal.SIGCONT, self._sigcont_handler)
+ self.signal_handler_setter(signal.SIGTSTP, self._sigtstp_handler)
def signal_restore(self):
"""
Called in the finally block of run wrapper to restore the
- SIGWINCH and SIGCONT signal handlers.
+ SIGTSTP, SIGCONT and SIGWINCH signal handlers.
Override this function to call from main thread in threaded
applications.
"""
+ self.signal_handler_setter(signal.SIGTSTP, signal.SIG_DFL)
self.signal_handler_setter(signal.SIGCONT, signal.SIG_DFL)
self.signal_handler_setter(signal.SIGWINCH, signal.SIG_DFL)