Repository navigation
Terminal: roadmap to a daily-use terminal (Ghostty-class) #179
Copy link
Copy link
Open
Description
Goal: make the Makepad terminal (apps/terminal, OctoSense's native Terminal) a daily-use terminal on par with Ghostty. Items are done in this order. Each item is its own PR, with unit tests and remote-instrument evidence (MAKEPAD_HIDE_WINDOWS=1 terminal --remote), and the maintainer tests it before merge.
Done
- Settings lists scroll with the mouse; a change applies even when it can't be saved (News M1: news data service (feeds, ledger, tools; no LLM) #60)
- Tab title reported to the window manager; rename a tab by long press or double-click: makepad#61
Phase 1: correctness
- Large pastes freeze the UI: the PTY descriptor is set blocking by the reader, and keyboard and paste writes happen on the UI thread: makepad#63
- Wide characters (CJK) are mishandled on resize reflow: a wide cell's tail is counted as another column: makepad#62
- Quit, native window close and the hosted close path skip the running-job confirmation: makepad#65, Tracking: ADR 0002 first slice — News (M1–M8) #68; OctoSense#186, shell: a process app may refuse a close and ask first (#179) #187
- A timed-out control (automation) request stays queued and can type later: makepad#64
- OctoSense's in-process tool adapter expects
MpTerm, but the module returnsTermTabs(read tools report "unavailable"): OctoSense#181
Phase 2: protocol completeness
- Kitty keyboard protocol: ordinary text goes through the encoder, and key releases are forwarded: makepad#67
- Synchronized output (mode 2026) is respected by rendering: makepad#67
- Grapheme clusters are drawn as one unit (joined emoji, combining marks), mode 2027 on by default: makepad#66
- Rendering polish: Powerline sprites, bundled Nerd Font symbols, smooth shades, minimum contrast, themeable selection: makepad#69
Phase 3: text shaping
- Full shaping for complex scripts, ligatures (on by default, with a toggle) and ZWJ emoji; consistent CJK width; Indic scripts one cell per base letter, matching zsh: makepad#70, crates/shell: one shell for desktop and phone (monorepo batch 2) #71
- A plain click-drag selects text; Shift+drag overrides mouse reporting: makepad#72
Phase 4: daily-use features
- Search in scrollback (incremental, smart case, regex, next/previous): makepad#74
- Clickable links: OSC 8 and detected URLs and paths; link storage bounded by scrollback: makepad#73 (relative paths wait for OSC 7 in phase 5)
- Configurable shortcuts: a key-binding table in
settings.confand the panel (in progress)
Phase 5: shell integration
- OSC 133 prompt marks: jump to a prompt, select a command's output, exit status
- OSC 7 current directory for new tabs and splits; auto-injected zsh, bash and fish scripts
Phase 6: inline images
- Kitty graphics protocol, then iTerm2 inline images, then Sixel
Phase 7: recovery
- Restore the layout (tabs, splits, working directories, titles)
- Recover scrollback after a crash; reattach to running shells when the host restarts
Phase 8: validation before switching
- neovim, SSH, tmux, a coding agent (Claude Code or Codex), Chinese IME input, long-running sessions (memory and CPU over hours)
- Performance comparison with Ghostty (throughput, input latency)
🤖 Generated with Claude Code
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
Merge pull request #187 from OctoSense-org/feat/process-close-confirm
shell: a process app may refuse a close and ask first (OctoSense-org#179