diff options
author | Andrey Proskurin <69064459+proskur1n@users.noreply.github.com> | 2023-03-28 19:11:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-28 19:11:32 +0200 |
commit | 6040833ae1dd41b96ab5b226debffa8c47b66569 (patch) | |
tree | ae6f87f4ab6a9c15eea0a888dd406a0d72b56a81 | |
parent | 3e6b5e6576cc2d3b06b25689d8a3c05cb4a98ae2 (diff) | |
download | urwid-6040833ae1dd41b96ab5b226debffa8c47b66569.tar.gz |
fix: restore normal screen on ctrl-z (#477)
-rw-r--r-- | urwid/raw_display.py | 14 |
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) |