mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-24 09:18:08 +02:00
Make DebugStream also execute commands, not just dump them
This commit is contained in:
@@ -22,11 +22,11 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
|
from functools import wraps
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
from . import control as ctrl, escape as esc
|
from . import control as ctrl, escape as esc
|
||||||
@@ -157,11 +157,6 @@ class Stream(object):
|
|||||||
if not hasattr(screen, event):
|
if not hasattr(screen, event):
|
||||||
error_message = "{0} is missing {1}".format(screen, event)
|
error_message = "{0} is missing {1}".format(screen, event)
|
||||||
raise TypeError(error_message)
|
raise TypeError(error_message)
|
||||||
if self.listener is not None:
|
|
||||||
warnings.warn("As of version 0.6.0 the listener queue is "
|
|
||||||
"restricted to a single element. Existing "
|
|
||||||
"listener {0} will be replaced."
|
|
||||||
.format(self.listener), DeprecationWarning)
|
|
||||||
|
|
||||||
self.listener = screen
|
self.listener = screen
|
||||||
self._parser = self._parser_fsm()
|
self._parser = self._parser_fsm()
|
||||||
@@ -362,9 +357,8 @@ class DebugStream(Stream):
|
|||||||
default, which means -- debug all events).
|
default, which means -- debug all events).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, screen, to=sys.stdout, only=()):
|
||||||
to = kwargs.pop('to', sys.stdout)
|
stream = super(DebugStream, self)
|
||||||
only = kwargs.pop('only', ())
|
|
||||||
|
|
||||||
def safe_str(chunk):
|
def safe_str(chunk):
|
||||||
if isinstance(chunk, bytes):
|
if isinstance(chunk, bytes):
|
||||||
@@ -374,22 +368,20 @@ class DebugStream(Stream):
|
|||||||
|
|
||||||
return chunk
|
return chunk
|
||||||
|
|
||||||
def noop(*args, **kwargs):
|
class Bugger:
|
||||||
pass
|
|
||||||
|
|
||||||
class Bugger(object):
|
|
||||||
|
|
||||||
def __getattr__(self, event):
|
def __getattr__(self, event):
|
||||||
if only and event not in only:
|
|
||||||
return noop
|
|
||||||
|
|
||||||
|
@wraps(getattr(screen, event))
|
||||||
def inner(*args, **kwargs):
|
def inner(*args, **kwargs):
|
||||||
to.write(event.upper() + " ")
|
if not only or event in only:
|
||||||
to.write("; ".join(map(safe_str, args)))
|
to.write(event.upper() + " ")
|
||||||
to.write(" ")
|
to.write("; ".join(map(safe_str, args)))
|
||||||
to.write(", ".join("{0}: {1}".format(k, safe_str(v))
|
to.write(" ")
|
||||||
for k, v in kwargs.items()))
|
to.write(", ".join("{0}: {1}".format(k, safe_str(v))
|
||||||
to.write(os.linesep)
|
for k, v in kwargs.items()))
|
||||||
return inner
|
to.write(os.linesep)
|
||||||
|
getattr(screen, event)(*args, **kwargs)
|
||||||
|
|
||||||
super(DebugStream, self).__init__(Bugger(), *args, **kwargs)
|
return inner
|
||||||
|
stream.__init__(Bugger())
|
||||||
|
|||||||
Reference in New Issue
Block a user