mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-10-03 08:02:02 +00:00
* feat(search): replace the command palette with tabbed Search Everywhere The palette was one flat list that every new kind of row had to be squeezed into: tabs and SSH hosts rode along as "Switch to Tab: …" and "SSH: …" commands, and the only way to narrow to one kind was a magic seed word. Search Everywhere splits it into sources behind one trait — All, Actions, Terminals, Hosts — each with its own empty-query layout and ranking. The All tab shows each source's top rows, ordered by best match, with a row that opens the full tab. Tab / Shift-Tab walk the tabs and keep the query. - Terminals lists every open tab of every workspace (reusing the switcher's tab rows) and jumps to it wherever it lives, plus the shells and agents. - Hosts replaces the separate "Add Connection" input: a typed address or full `ssh …` line offers to connect. - Fixes Return doing nothing after a search that found nothing, or when the search opens pre-filtered: gpui-component re-picks the row from a stale frame; the delegate now re-arms the first row. - Fixes `ssh -p 2222 me@box` being offered as a quick-connect address with user `ssh -p 2222 me`. The keymap action stays `TogglePalette` so custom bindings keep working. * feat(search): a Sessions tab to resume past agent sessions Search Everywhere gains a Sessions tab listing the Claude Code and Codex sessions on this computer, read from ~/.claude/projects and ~/.codex/sessions ($CODEX_HOME). Sessions that ran in the focused tab's directory lead; the All tab offers the last three of them before anything is typed. Return opens a new tab in the session's directory and runs the agent's resume command with its configured launch flags. - Only each transcript's head and tail are read, off the window thread, and cached by path, size and mtime: ~170ms cold for 50 sessions, under 1ms warm. The search opens on the cached list and fills in. - Titles: /rename name, then the agent's own title (ai-title, Codex's session_index.jsonl), then the first thing typed, skipping harness injections. Codex rollouts it ran for itself (subagent/internal) and sessions never asked anything are left out. - A session whose directory is gone is refused with a notice rather than resumed where the agent cannot find it.
114 lines
3.3 KiB
Plaintext
114 lines
3.3 KiB
Plaintext
---
|
||
title: "Themes"
|
||
description: "Thirteen built-ins, your own YAML themes, iTerm2 imports, and a colour editor."
|
||
---
|
||
|
||
**Settings → Appearance → Theme** — or **Change Theme…** in Search
|
||
Everywhere — opens the theme picker.
|
||
|
||
## Built in
|
||
|
||
| Light | Dark |
|
||
|---|---|
|
||
| Light *(default)* · One Light · Catppuccin Latte · Rosé Pine Dawn | Dark · Dracula · Harbor · One Dark Pro · Rosé Pine · Catppuccin Mocha · Gruvbox Dark · Nord · Tokyo Night |
|
||
|
||
<Frame caption="The theme picker, light themes first, then dark">
|
||
<img src="/images/theme-picker.webp" alt="The tty7 theme picker" />
|
||
</Frame>
|
||
|
||
## Following the system
|
||
|
||
Turn on **Sync with system** and pick a theme for each appearance. tty7 follows
|
||
the OS live — no restart, no reload.
|
||
|
||
```json
|
||
{
|
||
"theme_follow_system": true,
|
||
"theme_preset_light": "one_light",
|
||
"theme_preset_dark": "dracula"
|
||
}
|
||
```
|
||
|
||
## Legible bright colours
|
||
|
||
Some palettes put a bright ANSI colour so close to their own background that it
|
||
disappears. **Legible bright colors** (on by default) brightens or darkens those
|
||
just enough to be readable. Turn it off with `theme_legible_palette: false` if
|
||
you want the palette exactly as authored.
|
||
|
||
## Transparency
|
||
|
||
**Settings → Appearance → Transparency**:
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Opacity** | 0.2–1.0, applied to every theme. *Follow theme* hands the decision back to the theme's own `opacity`. |
|
||
| **Blur** | Blurs whatever is behind a translucent window (macOS). |
|
||
| **Background material** | Windows only: *Auto*, *Blur*, *Mica*, *Mica Alt*, *Acrylic*, *Off*. Only the presets your Windows build supports are listed. |
|
||
|
||
## Writing your own
|
||
|
||
**Open themes folder** in Settings takes you to:
|
||
|
||
| | |
|
||
|---|---|
|
||
| macOS / Linux | `~/.config/tty7/themes/` |
|
||
| Windows | `%APPDATA%\tty7\themes\` |
|
||
|
||
Drop a `.yaml` file in and it appears in the picker. The file name is the
|
||
theme's id; `name` is what is shown.
|
||
|
||
```yaml
|
||
name: "Midnight"
|
||
background: "#0d1117"
|
||
foreground: "#c9d1d9"
|
||
accent: "#3fdd8c"
|
||
cursor: "#3fdd8c"
|
||
selection: "#264f78"
|
||
opacity: 0.95
|
||
blur: true
|
||
ansi:
|
||
normal: ["#484f58", "#ff7b72", "#3fb950", "#d29922", "#58a6ff", "#bc8cff", "#39c5cf", "#b1bac4"]
|
||
bright: ["#6e7681", "#ffa198", "#56d364", "#e3b341", "#79c0ff", "#d2a8ff", "#56d4dd", "#f0f6fc"]
|
||
```
|
||
|
||
Everything except `background`, `foreground`, `accent`, and `ansi` is optional.
|
||
|
||
### Gradients and images
|
||
|
||
`background` also takes two colours:
|
||
|
||
```yaml
|
||
background: { top: "#0d1117", bottom: "#161b22" }
|
||
# or
|
||
background: { left: "#0d1117", right: "#161b22" }
|
||
```
|
||
|
||
And a theme can carry an image behind the terminal:
|
||
|
||
```yaml
|
||
background_image:
|
||
path: "/Users/me/Pictures/wall.jpg"
|
||
opacity: 0.25
|
||
```
|
||
|
||
The Settings panel has a picker for both, so you rarely have to write this by
|
||
hand.
|
||
|
||
## Editing in the app
|
||
|
||
Select a built-in theme and hit **Duplicate to edit** — built-ins are read-only,
|
||
so the editor works on your copy. From there you get every colour, including the
|
||
sixteen ANSI slots, plus the background image controls. Changes are written back
|
||
to your themes folder as YAML.
|
||
|
||
## Importing from iTerm2
|
||
|
||
Drop an `.itermcolors` file into the themes folder and tty7 reads it directly —
|
||
no conversion step.
|
||
|
||
<Note>
|
||
A theme file tty7 could not load is listed in Settings under **Not loaded from
|
||
the themes folder**, with the reason, rather than silently ignored.
|
||
</Note>
|