Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
e08d79b
Add termshow assets and auto-injection
rich-iannone May 22, 2026
d0db65a
Pre-render .termshow recordings into termshow/
rich-iannone May 22, 2026
519cdd1
Pre-render termshow recordings before build
rich-iannone May 22, 2026
fb38477
Add termshow CLI command group
rich-iannone May 22, 2026
da1178d
Add 'record' command to CLI
rich-iannone May 22, 2026
54b7ed3
Add 'render' CLI command to export frames
rich-iannone May 22, 2026
b8194cb
Add import-cast CLI command
rich-iannone May 22, 2026
75265cc
Add import-tape CLI command
rich-iannone May 22, 2026
f39da91
Add commands to termshow CLI group
rich-iannone May 22, 2026
f696c3d
Add termshow edit command and register group
rich-iannone May 22, 2026
ba07a28
Add PTY-based terminal session recorder
rich-iannone May 22, 2026
1383d23
Add _set_raw_mode helper to recorder
rich-iannone May 22, 2026
a79f5ea
Add recorder diagnostic message patterns
rich-iannone May 22, 2026
e766e37
Add function to strip recorder messages
rich-iannone May 22, 2026
a402043
Add _is_recorder_message() helper
rich-iannone May 22, 2026
3e45017
Add parser for .termshow and asciicast
rich-iannone May 22, 2026
02848c5
Add TermInfo dataclass for terminal info
rich-iannone May 22, 2026
8be89db
Add Event dataclass to parser
rich-iannone May 22, 2026
bbe0514
Add Recording dataclass for parsed sessions
rich-iannone May 22, 2026
4238d12
Add parse_termshow helper to parser
rich-iannone May 22, 2026
1f63ffd
Add parse_termshow_str to parse termshow text
rich-iannone May 22, 2026
b746357
Add parse_asciicast file helper
rich-iannone May 22, 2026
5e16890
Implement parse_asciicast_str for asciicast text
rich-iannone May 22, 2026
a233919
Add _header_to_recording helper
rich-iannone May 22, 2026
2b76dcf
Add _parse_theme() helper to parser
rich-iannone May 22, 2026
6f7d5d7
Add asciicast importer for termshow
rich-iannone May 22, 2026
573c5fb
Add import_tape to convert .tape to .termshow
rich-iannone May 22, 2026
401bc14
Add _parse_tape DSL parser to importer
rich-iannone May 22, 2026
b1a00f9
Add _parse_duration() helper to importer
rich-iannone May 22, 2026
72d970b
Add .termshow exporter (_write_termshow)
rich-iannone May 22, 2026
924cd8a
Add manifest generator module for term player
rich-iannone May 22, 2026
c9bf761
Add DeltaChange dataclass for delta frames
rich-iannone May 22, 2026
d0c0b7d
Add DeltaEntry dataclass for delta frames
rich-iannone May 22, 2026
a30c410
Add Manifest dataclass for termshow recordings
rich-iannone May 22, 2026
7c28f52
Add Manifest.to_json serializer
rich-iannone May 22, 2026
5c3818f
Add generate_manifest to render SVG keyframes
rich-iannone May 22, 2026
9212fbd
Add helper to compute keyframe times
rich-iannone May 22, 2026
16f1d89
Add _delta_change_to_dict helper to manifest
rich-iannone May 22, 2026
b3268a8
Add term player script with Chapter dataclass
rich-iannone May 22, 2026
dfa2e10
Add Cut and Annotation dataclasses
rich-iannone May 22, 2026
377fd66
Add SpeedSegment dataclass
rich-iannone May 22, 2026
f7573ec
Add Highlight dataclass for terminal regions
rich-iannone May 22, 2026
7250464
Add Script dataclass for termshow scripts
rich-iannone May 22, 2026
c4195be
Add load_script to parse .termshow.yml
rich-iannone May 22, 2026
3a92809
Add _parse_script_data to parse script data
rich-iannone May 22, 2026
8ad4aaf
Add apply_script to apply script overlays
rich-iannone May 22, 2026
791f936
Add idle-period compression helper
rich-iannone May 22, 2026
fd33f1a
Add _apply_cuts to remove events in cuts
rich-iannone May 22, 2026
3b59c5d
Add _apply_speed_map to remap event times
rich-iannone May 22, 2026
90ab605
Add _remap_time helper for speed segments
rich-iannone May 22, 2026
fb0145b
Add SVG renderer for terminal player
rich-iannone May 22, 2026
1481575
Add render_frame SVG renderer for terminal state
rich-iannone May 22, 2026
02fe2d7
Add render_frames to render multiple SVG frames
rich-iannone May 22, 2026
9162000
Add window chrome rendering helpers
rich-iannone May 22, 2026
925ebb7
Add _collect_bg_spans helper to renderer
rich-iannone May 22, 2026
1788167
Add _collect_text_spans to renderer
rich-iannone May 22, 2026
3ed853d
Add _resolve_fg and _resolve_bg helpers
rich-iannone May 22, 2026
055e998
Add _index_to_color helper to resolve colors
rich-iannone May 22, 2026
55c77d9
Add _style_classes helper
rich-iannone May 22, 2026
8728603
Add lightweight terminal emulator module
rich-iannone May 22, 2026
8cf0823
Add 16-color ANSI palette to emulator
rich-iannone May 22, 2026
784639a
Add ScreenState dataclass for terminal snapshots
rich-iannone May 22, 2026
c1febe0
Add Cell dataclass for terminal grid
rich-iannone May 22, 2026
485b408
Add regexes for terminal escape sequences
rich-iannone May 22, 2026
4aa60d1
Add minimal TerminalEmulator class
rich-iannone May 22, 2026
9d42b4f
Add screen property to TerminalEmulator
rich-iannone May 22, 2026
6942c3a
Add feed method to TerminalEmulator
rich-iannone May 22, 2026
281a7c5
Add blank screen/row helpers to emulator
rich-iannone May 22, 2026
8c110af
Add _put_char and _linefeed to emulator
rich-iannone May 22, 2026
877dfb1
Add scroll up/down helpers to emulator
rich-iannone May 22, 2026
1b17baf
Add handler for simple ESC sequences
rich-iannone May 22, 2026
768b2d6
Add CSI (ANSI/VT) control-sequence handling
rich-iannone May 22, 2026
c663c34
Add DEC private mode handler
rich-iannone May 22, 2026
e715003
Add SGR handler to TerminalEmulator
rich-iannone May 22, 2026
9f49cd8
Add extended color parsing helper
rich-iannone May 22, 2026
6dac7bf
Add 256-color index to hex conversion
rich-iannone May 22, 2026
29400bc
Add _erase_display method to emulator
rich-iannone May 22, 2026
58e0a3d
Add _erase_line to TerminalEmulator
rich-iannone May 22, 2026
e14cfac
Add resize method to TerminalEmulator
rich-iannone May 22, 2026
065a37b
Add _parse_params helper for CSI params
rich-iannone May 22, 2026
4818282
Add termshow SVG terminal player
rich-iannone May 22, 2026
d2ce2c4
Add Termshow player styles
rich-iannone May 22, 2026
110f78a
Add termshow Quarto shortcode extension
rich-iannone May 22, 2026
e05188d
Add termshow editor module
rich-iannone May 22, 2026
4711eff
Add _serialize_script to editor
rich-iannone May 22, 2026
d1a1436
Add EditorHandler HTTP server for editor
rich-iannone May 22, 2026
8f66748
Add serve_editor to launch editor server
rich-iannone May 22, 2026
a41685c
Add _get_editor_html helper
rich-iannone May 22, 2026
d78f1d6
Embed Termshow editor HTML UI
rich-iannone May 22, 2026
5bf30de
Add term_player package exports
rich-iannone May 22, 2026
acc6126
Add tests for term CLI subcommands
rich-iannone May 22, 2026
c767e8d
Add terminal emulator tests
rich-iannone May 22, 2026
7d7e9c6
Add tests for term importer
rich-iannone May 22, 2026
b217bb7
Add tests for term player manifest
rich-iannone May 22, 2026
193fd36
Add tests for term parser
rich-iannone May 22, 2026
8ed410b
Add unit tests for term renderer
rich-iannone May 22, 2026
8b77767
Add tests for term player script module
rich-iannone May 22, 2026
020b19a
Add Terminal Recordings user guide
rich-iannone May 22, 2026
6c09be2
Add nav icon for Terminal Recordings
rich-iannone May 22, 2026
b2855b9
Add gdtest_termshow demo package
rich-iannone May 22, 2026
b8a1b68
Add termshow demo recording and config
rich-iannone May 22, 2026
de2ad6f
Prefer external manifest, fallback to inline
rich-iannone May 22, 2026
9d30782
Update 41-terminal-recordings.qmd
rich-iannone May 22, 2026
4811403
Add inspector panel and source file size info
rich-iannone May 22, 2026
38c06c7
Double-click + drag-threshold for creating items
rich-iannone May 22, 2026
bc1fc9e
Add resizable preview handle and resizing logic
rich-iannone May 22, 2026
046b13c
Add inspector UI, layout presets & controls
rich-iannone May 23, 2026
503653e
Expand termshow guide with editor UI and workflow
rich-iannone May 23, 2026
5a6490e
Adjust .shortcuts padding in editor CSS
rich-iannone May 23, 2026
0ab1651
Use [ and ] for chapter navigation
rich-iannone May 23, 2026
0265899
Update chapter shortcuts and help labels
rich-iannone May 23, 2026
260156d
Update 41-terminal-recordings.qmd
rich-iannone May 23, 2026
3027ecf
Create termshow-editor-diagram.png
rich-iannone May 23, 2026
ad9e568
Update 41-terminal-recordings.qmd
rich-iannone May 23, 2026
22558ed
Update 41-terminal-recordings.qmd
rich-iannone May 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions assets/termshow-demo.termshow
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
{"version": 1, "format": "termshow", "term": {"cols": 80, "rows": 20, "type": "xterm-256color"}, "title": "Termshow Demo"}
[0.8, "o", "\u001b[32m\u001b[1m$\u001b[0m "]
[0.656, "o", "p"]
[0.068, "o", "i"]
[0.144, "o", "p"]
[0.285, "o", " "]
[0.168, "o", "i"]
[0.102, "o", "n"]
[0.13, "o", "s"]
[0.066, "o", "t"]
[0.133, "o", "a"]
[0.135, "o", "l"]
[0.161, "o", "l"]
[0.311, "o", " "]
[0.12, "o", "g"]
[0.089, "o", "r"]
[0.106, "o", "e"]
[0.085, "o", "a"]
[0.148, "o", "t"]
[0.208, "o", "-"]
[0.194, "o", "t"]
[0.15, "o", "a"]
[0.152, "o", "b"]
[0.142, "o", "l"]
[0.067, "o", "e"]
[0.105, "o", "s"]
[0.347, "o", "\r\n"]
[0.4, "o", "\u001b[33mCollecting great-tables...\u001b[0m\r\n"]
[1.2, "o", "\u001b[33mDownloading great_tables-0.16.0-py3-none-any.whl (245 kB)\u001b[0m\r\n"]
[2.1, "o", "\u001b[33mInstalling collected packages: great-tables\u001b[0m\r\n"]
[1.4, "o", "\u001b[32mSuccessfully installed great-tables-0.16.0\u001b[0m\r\n"]
[0.0, "m", "install done"]
[1.5, "o", "\u001b[32m\u001b[1m$\u001b[0m "]
[0.44, "o", "p"]
[0.138, "o", "y"]
[0.122, "o", "t"]
[0.116, "o", "h"]
[0.218, "o", "o"]
[0.11, "o", "n"]
[0.296, "o", " "]
[0.071, "o", "-"]
[0.218, "o", "c"]
[0.261, "o", " "]
[0.151, "o", "\""]
[0.181, "o", "i"]
[0.069, "o", "m"]
[0.113, "o", "p"]
[0.239, "o", "o"]
[0.139, "o", "r"]
[0.155, "o", "t"]
[0.242, "o", " "]
[0.115, "o", "g"]
[0.116, "o", "r"]
[0.154, "o", "e"]
[0.113, "o", "a"]
[0.206, "o", "t"]
[0.061, "o", "_"]
[0.079, "o", "t"]
[0.198, "o", "a"]
[0.071, "o", "b"]
[0.208, "o", "l"]
[0.237, "o", "e"]
[0.082, "o", "s"]
[0.286, "o", " "]
[0.116, "o", "a"]
[0.107, "o", "s"]
[0.237, "o", " "]
[0.157, "o", "G"]
[0.184, "o", "T"]
[0.6, "o", ";"]
[0.186, "o", " "]
[0.238, "o", "p"]
[0.138, "o", "r"]
[0.109, "o", "i"]
[0.209, "o", "n"]
[0.208, "o", "t"]
[0.07, "o", "("]
[0.088, "o", "G"]
[0.235, "o", "T"]
[0.103, "o", "."]
[0.245, "o", "_"]
[0.075, "o", "_"]
[0.083, "o", "v"]
[0.172, "o", "e"]
[0.133, "o", "r"]
[0.152, "o", "s"]
[0.113, "o", "i"]
[0.144, "o", "o"]
[0.119, "o", "n"]
[0.218, "o", "_"]
[0.131, "o", "_"]
[0.067, "o", ")"]
[0.135, "o", "\""]
[0.346, "o", "\r\n"]
[0.6, "o", "0.16.0\r\n"]
[0.0, "m", "version check"]
[0.8, "o", "\u001b[32m\u001b[1m$\u001b[0m "]
24 changes: 24 additions & 0 deletions assets/termshow-demo.termshow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
source: assets/termshow-demo.termshow

settings:
idle_time_limit: 2
window_chrome: colorful

chapters:
- at: 0
label: "Install a Package"
- at: 11.67
label: "Verify Installation"

annotations:
- at: 0.8
duration: 6
text: "pip install runs in the recorded shell"
position: top-right
style: callout
- at: 12
duration: 6
text: "Confirm the package installed correctly"
position: top-right
style: subtle

Binary file added assets/termshow-editor-diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions great-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ nav_icons:
Horizontal Rules: minus
Keyboard Keys: keyboard
Collapsible Details: panel-top-close
Terminal Recordings: clapperboard

# Author Information
# ------------------
Expand Down
22 changes: 22 additions & 0 deletions great_docs/_term_player/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""Terminal Player: record, render, and play terminal sessions as SVG sequences."""

from __future__ import annotations

from .emulator import TerminalEmulator
from .manifest import Manifest, generate_manifest
from .parser import Recording, parse_asciicast, parse_termshow
from .renderer import render_frame, render_frames
from .script import Script, apply_script

__all__ = [
"Manifest",
"Recording",
"Script",
"TerminalEmulator",
"apply_script",
"generate_manifest",
"parse_asciicast",
"parse_termshow",
"render_frame",
"render_frames",
]
Loading
Loading