Add breakpoints

This commit is contained in:
Marcin Kulik
2023-04-24 22:30:59 +02:00
parent f25f9d6e8b
commit 5b24513c2f
7 changed files with 28 additions and 1 deletions

View File

@@ -419,6 +419,9 @@ quiet = true
; default: C-\ (control + backslash)
pause_key = C-p
; Define hotkey for adding a breakpoint, default: None
add_breakpoint_key = C-b
; Define hotkey prefix key - when defined other recording hotkeys must
; be preceeded by it, default: no prefix
prefix_key = C-a

View File

@@ -33,6 +33,9 @@ class writer(file_writer):
def write_stdin(self, ts: float, data: Any) -> None:
pass
def write_breakpoint(self, ts: float) -> None:
pass
# pylint: disable=consider-using-with
def _open_file(self) -> None:
if self.path == "-":

View File

@@ -145,6 +145,9 @@ class writer(file_writer):
data = self.stdin_decoder.decode(data)
self.__write_event(ts, "i", data)
def write_breakpoint(self, ts: float) -> None:
self.__write_event(ts, "b", "")
# pylint: disable=consider-using-with
def _open_file(self) -> None:
if self.path == "-":

View File

@@ -34,6 +34,7 @@ class RecordCommand(Command): # pylint: disable=too-many-instance-attributes
self.key_bindings = {
"prefix": config.record_prefix_key,
"pause": config.record_pause_key,
"add_breakpoint": config.record_add_breakpoint_key,
}
# pylint: disable=too-many-branches

View File

@@ -136,6 +136,10 @@ class Config:
def record_pause_key(self) -> Any:
return self.__get_key("record", "pause", "C-\\")
@property
def record_add_breakpoint_key(self) -> Any:
return self.__get_key("record", "add_breakpoint")
@property
def play_idle_time_limit(self) -> Optional[float]:
fallback = self.config.getfloat(

View File

@@ -36,6 +36,7 @@ def record(
prefix_mode: bool = False
prefix_key = key_bindings.get("prefix")
pause_key = key_bindings.get("pause")
add_breakpoint_key = key_bindings.get("add_breakpoint")
def set_pty_size() -> None:
cols, rows = get_tty_size()
@@ -58,7 +59,9 @@ def record(
prefix_mode = True
return
if prefix_mode or (not prefix_key and data in [pause_key]):
if prefix_mode or (
not prefix_key and data in [pause_key, add_breakpoint_key]
):
prefix_mode = False
if data == pause_key:
@@ -71,6 +74,11 @@ def record(
pause_time = time.time()
notify("Paused recording")
elif data == add_breakpoint_key:
assert start_time is not None
writer.write_breakpoint(time.time() - start_time)
notify("Added breakpoint")
return
remaining_data = data

View File

@@ -131,6 +131,9 @@ class async_writer(async_worker):
def write_stdout(self, ts: float, data: Any) -> None:
self.enqueue([ts, "o", data])
def write_breakpoint(self, ts: float) -> None:
self.enqueue([ts, "b", None])
def run(self) -> None:
try:
with self.writer as w:
@@ -143,6 +146,8 @@ class async_writer(async_worker):
w.write_stdout(self.time_offset + ts, data)
elif etype == "i":
w.write_stdin(self.time_offset + ts, data)
elif etype == "b":
w.write_breakpoint(self.time_offset + ts)
except IOError:
for event in iter(self.queue.get, None):
pass