l0ng-ai 6789f944ae feat(input): treat Option as Alt/Meta on macOS behind a setting
macOS gives the Option key two jobs a terminal can't serve at once: the
OS composes a special character (Option+B types ∫), while Meta bindings
need an ESC-prefixed chord (Option+B → ESC b, readline's backward-word).
A new `macos_option_as_alt` config (Settings → Terminal → Keyboard, off
by default) picks which one wins, matching Ghostty's `macos-option-as-alt`
and iTerm2's "Option as Meta".

The keystroke is reshaped once at the top of `on_key_down` — on: the
composed `key_char` is replaced with the base key so the encoder emits
`ESC` + the plain character (uppercased under Shift, like xterm's
metaSendsEscape); off: the alt bit is dropped so the composed character
goes out bare. Every consumer downstream (the ⌘ dispatcher, the prompt
editor, the PTY encoder, the Kitty encoder) then sees one consistent
story.

This also fixes two existing defects, both settings:

* The raw path used to emit `ESC ∫` for Option+B — an ESC prefix bolted
  onto the composed character, wrong under either reading of Option.
* The prompt editor swallowed Option+letter chords entirely: no composed
  character, no motion. Off now inserts the composed character; on maps
  M-b / M-f / M-d to the readline word motions (which also lights them
  up on Linux, where Alt is natively Meta but the chords were no-ops).

Known limitation: with the setting on and a non-ASCII IME input source
active (e.g. Pinyin), gpui routes printable keys — Option chords
included — to the IME first, which commits the composed character before
the key event reaches the view; Meta chords need an ASCII-capable source
(e.g. ABC). No regression: that state behaved identically before.

Closes #13
2026-07-07 18:42:47 +08:00
2026-07-07 17:34:12 +08:00
2026-07-07 17:34:12 +08:00
2026-07-07 17:34:12 +08:00

tty7

tty7

A fast, GPU-rendered terminal in pure Rust.

GPU rendering on Zed's gpui · VT core from Alacritty


CI Version License

Install · Benchmarks · Shortcuts · Contributing

English · 简体中文


tty7

tty7 is a GPU-rendered terminal. An 11 MB cat finishes in 95 ms — about 2× faster than Alacritty, Ghostty, or Kitty on the same hardware — and the built-in prompt gives you inline completion, syntax highlighting, and per-flag hints for common commands. Pure Rust, native on macOS, Windows, and Linux, no configuration needed.

  • Fast — an 11 MB cat completes in 95 ms, versus 179239 ms for Alacritty/Ghostty/Kitty; DOOM-fire renders at 888 fps against their 485617. Same machine, same grid; the harness is in the repo (benchmarks).
  • ⌨️ Prompt with completions — inline completion, syntax highlighting, history, and in-terminal search. Type git commit --, kubectl, or npm and every flag and subcommand shows up with its description — rich signatures for ~100 common commands, generated from Fig's spec corpus.
  • 🧠 Shell-aware, zero config — new tabs and splits open in the current working directory, and path completion always follows where you are. zsh, bash, fish, and PowerShell are wired up automatically.
  • 🔌 Sessions that survive — shells run in a background daemon, so closing a window, quitting the app, or swapping in a new build never takes a shell down. Detach and reattach, no tmux.

Also included: tabs (drag to reorder, inline rename, number keys to switch) and resizable splits, a command palette, click-to-open links, desktop notifications, and focus-follows-mouse. Eight built-in themes from light to dark, with the native window chrome following the one you pick, plus CJK/IME input.

Native builds for macOS, Windows, and Linux — every release ships all three.



📊 Benchmarks

All four terminals measured back-to-back on the same machine, same day, same 155×40 grid — Apple M1 Pro, macOS 26.3.1, five-run averages (2026-07-04):

tty7 Alacritty Ghostty Kitty
Plaintext IO — 11 MB cat (lower = better) 95 ms 239 ms 179 ms 185 ms
DOOM-fire frame rate (higher = better) 888 fps 485 fps 552 fps 617 fps
Cold-launch memory 116 MB¹ 105 MB 128 MB 130 MB

¹ GUI 105 MB + the persistent daemon 11 MB.

tty7 reads the PTY at device speed and parses it in large batches off the render path, and the hot paths are lock-free — so a big cat never waits on drawing. (That's also what the background daemon buys you: it can run up to 16 MiB ahead of the window before backpressure applies.)

Methodology (how each terminal is driven, grid fairness, known pitfalls) and one-command reproduction live in scripts/bench/ — run it yourself.

🚀 Install

Grab the build for your platform from Releases:

  • macOStty7-<version>-macos-arm64.dmg (Apple Silicon) or …-x86_64.dmg (Intel); open it and drag tty7.app into Applications.
  • Windows…-windows-x86_64-setup.exe (installer: Start Menu shortcut + uninstall entry), or …-windows-x86_64.zip (portable: unzip and run tty7.exe).
  • Linux…-linux-x86_64.tar.gz; extract and run ./tty7 (needs the usual x11/wayland runtime libraries).

⌨️ Shortcuts

Keys are shown in macOS notation — on Windows and Linux, read as Ctrl. Open Settings with ⌘ , to browse or remap them all. The essentials:

⌘ T · ⌘ W · ⌘ ⇧ T new tab · close tab · reopen closed tab
⌘ D · ⌘ ⇧ D split right · split down
⌘ ] · ⌘ [ next pane · previous pane
⌘ ⏎ · ⌘ ⇧ ⏎ toggle fullscreen · maximize / restore the pane
⌘ K clear the screen and scrollback
⌘ P command palette
⌘ F search the scrollback
⌃ R reverse-search shell history
⌘ + · · ⌘ 0 font size up · down · reset

The full list — and any overrides — lives in Settings → Keybindings.

💭 Built with & inspired by

🤝 Contributing

Bug reports and PRs are welcome. Security issues go through SECURITY.md; notable changes land in the CHANGELOG.

📝 License

Apache License 2.0 · © 2026 l0ng-ai


tty7 — a fast, GPU-rendered terminal in pure Rust.

S
Description
A terminal workbench in pure Rust: shells, persistent sessions, SSH, coding agents. GPU-rendered on Zed's gpui, VT core from Alacritty.
Readme Apache-2.0
34 MiB
Languages
Rust 99.1%
Shell 0.5%
PowerShell 0.2%
Inno Setup 0.1%