mirror of
https://github.com/asciinema/asciinema.git
synced 2025-12-16 11:48:13 +01:00
Add breakpoints
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 == "-":
|
||||
|
||||
@@ -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 == "-":
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user