Skip to content

Terminal: roadmap to a daily-use terminal (Ghostty-class) #179

Open

Description

@ymote

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

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 returns TermTabs (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

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.conf and 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

Activity

  1. added a commit that references this issue on Sep 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions