summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlen <alen@dotfiles.xyz>2025-12-19 20:20:24 +0400
committerAlen <alen@dotfiles.xyz>2025-12-19 20:20:24 +0400
commit4e0963994d362f739bbb1c242ad64e2162aecaff (patch)
tree144011e7a04630d8c79e6d99c198711ccc38985a
parent70c20b4888e0b89f47ef39e578a32462a8ec300f (diff)
Add devtools resizer
-rw-r--r--dot_ipython/profile_default/startup/94_devtools.py52
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()