mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-25 01:38:02 +02:00
Make debugging kittens a little nicer
Now debug() writes to the stderr of the parent kitty process instead of a temp file.
This commit is contained in:
@@ -46,8 +46,6 @@ def create_kitten_handler(kitten, orig_args):
|
||||
|
||||
def set_debug(kitten):
|
||||
from kittens.tui.loop import debug
|
||||
path = os.path.join('/tmp', 'kitten-' + kitten)
|
||||
debug.fd = open(path, 'w')
|
||||
import builtins
|
||||
builtins.debug = debug
|
||||
|
||||
|
||||
@@ -3,16 +3,17 @@
|
||||
# License: GPL v3 Copyright: 2018, Kovid Goyal <kovid at kovidgoyal.net>
|
||||
|
||||
|
||||
from kittens.tui.operations import commander
|
||||
from .operations import commander
|
||||
|
||||
|
||||
class Handler:
|
||||
|
||||
image_manager_class = None
|
||||
|
||||
def _initialize(self, screen_size, quit_loop, wakeup, start_job, image_manager=None):
|
||||
def _initialize(self, screen_size, quit_loop, wakeup, start_job, debug, image_manager=None):
|
||||
self.screen_size, self.quit_loop = screen_size, quit_loop
|
||||
self.wakeup = wakeup
|
||||
self.debug = debug
|
||||
self.start_job = start_job
|
||||
self.cmd = commander(self)
|
||||
self.image_manager = image_manager
|
||||
@@ -20,10 +21,12 @@ class Handler:
|
||||
def __enter__(self):
|
||||
if self.image_manager is not None:
|
||||
self.image_manager.__enter__()
|
||||
self.debug.fobj = self
|
||||
self.initialize()
|
||||
|
||||
def __exit__(self, *a):
|
||||
del self.write_buf[:]
|
||||
del self.debug.fobj
|
||||
self.finalize()
|
||||
if self.image_manager is not None:
|
||||
self.image_manager.__exit__(*a)
|
||||
|
||||
@@ -31,12 +31,16 @@ screen_size = screen_size_function()
|
||||
|
||||
|
||||
def debug(*a, **kw):
|
||||
fd = getattr(debug, 'fd', None)
|
||||
if fd is None:
|
||||
fd = debug.fd = open('/tmp/kitten-debug', 'w')
|
||||
kw['file'] = fd
|
||||
from base64 import standard_b64encode
|
||||
buf = io.StringIO()
|
||||
kw['file'] = buf
|
||||
print(*a, **kw)
|
||||
fd.flush()
|
||||
text = buf.getvalue()
|
||||
text = b'\x1bP@kitty-print|' + standard_b64encode(text.encode('utf-8')) + b'\x1b\\'
|
||||
fobj = getattr(debug, 'fobj', sys.stdout.buffer)
|
||||
fobj.write(text)
|
||||
if hasattr(fobj, 'flush'):
|
||||
fobj.flush()
|
||||
|
||||
|
||||
def write_all(fd, data):
|
||||
@@ -374,7 +378,7 @@ class Loop:
|
||||
image_manager = handler.image_manager_class(handler)
|
||||
keep_going = True
|
||||
try:
|
||||
handler._initialize(screen_size(), self.quit, self.wakeup, self.start_job, image_manager)
|
||||
handler._initialize(screen_size(), self.quit, self.wakeup, self.start_job, debug, image_manager)
|
||||
with handler:
|
||||
while keep_going:
|
||||
has_data_to_write = bool(handler.write_buf)
|
||||
@@ -403,7 +407,7 @@ class Loop:
|
||||
handler = UnhandledException(tb)
|
||||
handler.write_buf = []
|
||||
handler._term_manager = term_manager
|
||||
handler._initialize(screen_size(), self.quit, self.wakeup, self.start_job)
|
||||
handler._initialize(screen_size(), self.quit, self.wakeup, self.start_job, debug)
|
||||
with handler:
|
||||
while True:
|
||||
has_data_to_write = bool(handler.write_buf)
|
||||
|
||||
Reference in New Issue
Block a user