summaryrefslogtreecommitdiffstats
path: root/deluge/ui/console/modes/basemode.py
diff options
context:
space:
mode:
Diffstat (limited to 'deluge/ui/console/modes/basemode.py')
-rw-r--r--deluge/ui/console/modes/basemode.py22
1 files changed, 13 insertions, 9 deletions
diff --git a/deluge/ui/console/modes/basemode.py b/deluge/ui/console/modes/basemode.py
index 5ebaf86..a8ab1db 100644
--- a/deluge/ui/console/modes/basemode.py
+++ b/deluge/ui/console/modes/basemode.py
@@ -8,7 +8,10 @@
#
import logging
+import signal
+import struct
import sys
+from typing import Tuple
import deluge.component as component
import deluge.ui.console.utils.colors as colors
@@ -22,10 +25,8 @@ except ImportError:
pass
try:
- import signal
- import struct
- import termios
from fcntl import ioctl
+ from termios import TIOCGWINSZ
except ImportError:
pass
@@ -62,17 +63,20 @@ class InputKeyHandler:
class TermResizeHandler:
def __init__(self):
try:
- signal.signal(signal.SIGWINCH, self.on_terminal_size)
+ signal.signal(signal.SIGWINCH, self.on_resize)
except ValueError as ex:
log.debug('TermResize unavailable, unable to catch SIGWINCH signal: %s', ex)
except AttributeError as ex:
log.debug('TermResize unavailable, no SIGWINCH signal on Windows: %s', ex)
- def on_terminal_size(self, *args):
- # Get the new rows and cols value
- rows, cols = struct.unpack('hhhh', ioctl(0, termios.TIOCGWINSZ, b'\000' * 8))[
- 0:2
- ]
+ @staticmethod
+ def get_window_size(fd: int = 0) -> Tuple[int, int]:
+ """Return the tty window size as row, col."""
+ return struct.unpack('4h', ioctl(fd, TIOCGWINSZ, b'\x00' * 8))[0:2]
+
+ def on_resize(self, _signum, _frame):
+ """Handler for SIGWINCH when terminal changes size"""
+ rows, cols = self.get_window_size()
curses.resizeterm(rows, cols)
return rows, cols