Releases: l0ng-ai/tty7
Release list
v0.10.0
Added
- Tab completion now executes the completion specs' dynamic generators:
positions whose candidates come from the live system get real values — git
branches ongit checkout <Tab>, container names for docker/podman,
package.jsonscripts for npm/pnpm/bun/yarn, cargo/rustup/tmux/brew/apt/pip
listings, and more. Scripts run off the main thread in the session's cwd
(800 ms timeout, output capped, short-lived cache) and their results merge
into the already-open menu as they arrive; a slow or failing generator just
contributes nothing. (#52) - When shell integration never engages in a pane, pressing Ctrl+R now explains
why the history menu can't appear (once per pane, dismissed by the next
keystroke) instead of failing silently — naming the wrapper when a
figterm-style PTY shim (kiro-cli-term,figterm,qterm) is intercepting
the shell's OSC 133 reports. The chord still reaches the shell, so its own
reverse-i-search keeps working. (#46)
Fixed
ssh <Tab>(and scp/sftp/rsync) now completes host aliases from
~/.ssh/config—Includefiles honored, wildcard patterns skipped — and
hosts fromknown_hosts, instead of falling back to listing the current
directory. (#51)
v0.9.0
Changed
- Ctrl+R history search is now a browsable menu: matching is fuzzy
(subsequence with word-boundary/consecutive bonuses; space-separated terms
must all match) blended with frecency, and the ranked candidates float
beside the prompt — matched characters highlighted, selection moved by
Ctrl+R/↓ and Ctrl+S/↑, Enter to edit, Cmd+Enter to run outright. An empty
query lists the whole history by frecency, so bare Ctrl+R is a "recent &
relevant" browser. The classic(reverse-i-search)line stays. (#45) - History records now carry when the command ran and its exit code: new
entries are<ts>\t<exit>\t<cwd>\t<command>, written when the command
finishes (zshINC_APPEND_HISTORY_TIME-style, exit code sniffed from
OSC 133;D daemon-side); older formats still load. The Ctrl+R menu shows
"ran 3h ago" and a✗badge on commands whose last run failed; timestamps
from zsh/bash history files are carried over when seeding. (#45)
v0.8.0
Added
- Copy on select: an opt-in Settings → Terminal → Clipboard toggle (config
keycopy_on_select) that copies a mouse selection — drag, double-click
word, or triple-click line, over terminal output or the prompt's command
editor — to the clipboard the moment the gesture ends, no ⌘C needed. Off
by default so a stray selection never overwrites the clipboard. (#34)
Fixed
- The held-⌘ tab-number badges no longer stick on after the window loses key
status mid-hold (⌘-Tab, Spotlight, a click into another app). The ⌘ release
goes to whatever app is key by then, so the window never saw it; the badges
— and any pending reveal — are now dismissed on the activation flip itself.
v0.7.0
Added
-
Terminal ANSI colors (
color0–color15) can now be overridden individually
viaansi_colors.*inconfig.json, layered on top of the active theme
preset — with a color picker per slot under Settings → Appearance → ANSI
Colors. Malformed values are ignored, and clearing an override falls back to
the preset's palette. (#37) -
Font ligatures can now be enabled for terminal text. A new optional
font_featuresconfig passes OpenType features (e.g.{"calt": true})
through to the renderer, and Settings → Appearance grows a toggle for the
commoncalt/ligapair. Ligatures stay disabled by default for cell-grid
safety, and changes hot-apply to open panes. (#38)
Fixed
- Ctrl+L now clears the screen while the prompt-local line editor is active.
The readline dispatcher used to swallow it as an unrecognized chord; it now
forwards the same form-feed byte the raw terminal path sends, so the shell
repaints its prompt as expected. (#36)
v0.6.2
Changed
- Context menus and the "+" dropdown now highlight the hovered row with the same
soft fill the command palette uses for its selected row, instead of the stock
saturated accent that snapped hard against the rest of the UI. The hover text
stays at the normal foreground so it reads clearly on the quieter fill.
Fixed
-
Windows: a pane no longer hangs open when its shell exits on its own
(exit, Ctrl-D, or a crash). ConPTY's output pipe never reports EOF on a
natural child exit, so tty7 — which detected a shell's death solely from that
EOF — left the pane wedged open, dead but visible. A Windows-only monitor now
waits on the shell process directly and reports the exit through the same path
a Unixread()EOF drives. Closing a tab from the UI was already unaffected;
macOS and Linux are unchanged. (#30) -
Nerd Font prompt icons no longer render sliced off on the right. A lone glyph
now paints into a two-cell window so it renders whole, instead of being clipped
to exactly one cell and severing the overflow. Pairs with the native powerline
separators from #19; Mono Nerd Fonts are unchanged. (#17) -
New tabs and splits no longer stall for seconds while a zsh plugin manager
reinstalls itself. tty7 now pointsZDOTDIRback at your real config dir while
your startup files run (and restores it for the live session), so plugin
managers and completion caches (Zim, oh-my-zsh,compinit) resolve correctly
and load instantly. Also fixes the relocated-config layout that previously
dropped tty7's integration. (#15)
Full changelog: v0.6.1...v0.6.2
v0.6.1
Fixed
- Tab completion (and inline line editing) over
ssh. A remote shell that
emits its own OSC 133 prompt marks — fish 4.x on a Linux server, most visibly,
which ships them on by default — used to engage tty7's local line editor, so
Tab ran completion against the local machine's filesystem instead of reaching
the remote shell. tty7 now only drives the inline editor while the shell it
launched is itself idle at its prompt; whenever a foreground command (ssh, a
TUI, a nested shell) owns the terminal, keystrokes pass straight through to it.
(#26, follow-up to #18)
Downloads: macOS (Apple Silicon / Intel .dmg), Windows (-setup.exe
installer or portable .zip), Linux (.tar.gz). Full changelog:
https://github.com/l0ng-ai/tty7/blob/v0.6.1/CHANGELOG.md
v0.6.0
tty7 v0.6.0 chore(release): v0.6.0 Shell picker in the "+" menu, Windows PowerShell 7 default, and fixes for powerline separators (#17), full-width-bracket URLs (#20), brew/nix shell detection (#18) and stale-daemon recovery on upgrade (#22).
v0.5.0
tty7 v0.5.0
Added
- Windows Inno Setup installer — Windows releases now ship
tty7-<version>-windows-x86_64-setup.exealongside the portable zip. Installs
per-user by default (no admin prompt, with an all-users option), adds a Start
Menu shortcut and an "Apps" uninstall entry, and offers an optional desktop
icon. Still unsigned, so SmartScreen warns on first launch. - Startup update check — tty7 asks GitHub once, in the background, whether a
newer release has shipped, and pops a one-time "Update available" dialog (once
per version) plus a persistent "Download" prompt in Settings → About. It never
downloads or updates itself — you still install by hand. Turn it off with
check_for_updatesinconfig.jsonor the toggle in About; a failed or
offline check is silent. - ⌘K clears the screen and scrollback (Ctrl+K on Windows/Linux) — the same
"Clear" the right-click menu already offered, now on the keyboard shortcut
Terminal.app / iTerm2 / Ghostty users expect. Also in the command palette and
remappable asClearScrollback. - ⌘⏎ toggles window fullscreen (new
ToggleFullscreenaction, also in the
View menu and command palette), matching the Ghostty/iTerm2 default. - Right-click menu shortcut hints — Copy, Paste, Select All, and Find now
show their keyboard shortcut like the other items, so the menu no longer looks
half-labelled. (⌘A / ⌘F stay hint-less on Windows/Linux, where those chords
keep their readline meaning.)
Changed
- Maximize / restore pane moved from ⌘⏎ to ⌘⇧⏎ (Ghostty's
toggle_split_zoom
default), making room for fullscreen on the bare chord. An existing
ToggleMaximizePaneoverride inkeybindingsstill wins.
Fixed
- Windows: launching tty7 no longer opens a stray console window behind the app.
(#10) - The right-click "Select All" now matches the ⌘A shortcut: at the prompt it
selects the edited command line, otherwise the whole terminal buffer. - Ctrl+R reverse-search now accepts plain ASCII keystrokes — a non-CJK input
source on macOS, and all typing on Linux, was previously swallowed. Reported
on V2EX.
Full changelog: v0.4.0...v0.5.0
v0.4.0
v0.3.0
Added
- PowerShell shell integration:
powershell.exeandpwshnow emit the OSC 133
semantic-prompt marks and OSC 7 cwd that zsh/bash/fish already do, injected
via-EncodedCommandafter the user's profile loads (their config is never
touched). This turns on the inline line editor at the PowerShell prompt — so
clicking positions the caret and new tabs/splits inherit the working
directory — which is what previously made mouse clicks a no-op at the prompt
on Windows.
Fixed
-
Typing
exit(or Ctrl-D) left a dead "process exited" pane behind instead
of closing it. A pane whose shell genuinely ends now closes itself —
collapsing its split, or closing the tab when it was the only pane (the
last tab falls back to the home page), like every other terminal. A pane
that merely lost its daemon connection still stays visible: auto-closing
those would silently discard — and kill — sessions that may still be alive
daemon-side. Panes that died while detached clean themselves up on the next
attach the same way. -
A full-screen TUI dying without restoring the terminal — the canonical case
being an ssh session dropping mid-htop/vim— left the pane stranded on
the alt screen with a hidden cursor and live mouse reporting: a visible
prompt with no cursor anywhere, mouse clicks echoing0;19;42M-style junk,
and broken scrollback. The client now scrubs this residue the moment the
shell reports its next prompt (OSC 133): it leaves the stranded alt screen,
re-shows the DECTCEM-hidden cursor, and disables stale mouse/focus reporting
and kitty keyboard flags — each reset only when its mode is actually set.
Reattach self-heals the same way, since the daemon replays the prompt state
after the ring. -
Windows shell integration never engaged even for the default shell: detection
keyed offportable-pty'sget_shell(), which reports%ComSpec%(cmd.exe)
regardless of what's actually spawned, so the PowerShell default was mistaken
for an unsupported shell. It now resolves topowershell.exedirectly.