diff options
| -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() |
