diff options
| author | Alen <alen@dotfiles.xyz> | 2025-12-19 20:20:24 +0400 |
|---|---|---|
| committer | Alen <alen@dotfiles.xyz> | 2025-12-19 20:20:24 +0400 |
| commit | 4e0963994d362f739bbb1c242ad64e2162aecaff (patch) | |
| tree | 144011e7a04630d8c79e6d99c198711ccc38985a | |
| parent | 70c20b4888e0b89f47ef39e578a32462a8ec300f (diff) | |
Add devtools resizer
| -rw-r--r-- | dot_ipython/profile_default/startup/94_devtools.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/dot_ipython/profile_default/startup/94_devtools.py b/dot_ipython/profile_default/startup/94_devtools.py new file mode 100644 index 0000000..bffd2e8 --- /dev/null +++ b/dot_ipython/profile_default/startup/94_devtools.py @@ -0,0 +1,52 @@ +"""Devtools utilities.""" + + +def _setup(): + try: + import devtools + except ModuleNotFoundError: + return + import logging + import time + import fcntl + import struct + import termios + import threading + + class DevtoolsResizer(threading.Thread): + """Devtools width resizer depending on tty size.""" + + def __init__(self, max_rows=200): + self.logger = logging.getLogger("startup.devtools") + self._run = False + super().__init__(name=type(self).__name__, daemon=True) + + @staticmethod + def _width(): + ioctl = fcntl.ioctl( + 0, termios.TIOCGWINSZ, struct.pack("HHHH", 0, 0, 0, 0) + ) + th, tw, hp, wp = struct.unpack("HHHH", ioctl) + return tw + + def run(self): + self.logger.info("Devtools resizer running") + self._run = True + while self._run: + width = self._width() + if devtools.pformat._width != width: + self.logger.debug("Resized devtools to %d", devtools.pformat._width) + devtools.pformat._width = width + time.sleep(0.2) + + def stop(self): + self._run = False + + DevtoolsResizer().start() + + +_setup() + +del _setup + +_summarise_startup() |
