mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-09-21 16:02:20 +00:00
Found by driving a dev instance and measuring what an idle window costs. Two of them were frame loops that never stopped. A `Head` diff overlay calls itself stale when the cached git status disagrees with the snapshot on screen, and every landed probe wakes that check by touching the cache — but the read published its counts and left the branch behind, so a branch switched outside tty7 made the disagreement permanent: two `git` processes a lap, forever, with `refreshing…` pinned to the header and an idle window at 7% of a core. And the home page asked for a frame sixty times a second to change one glyph's opacity twice, which made a window with nothing open in it eight times more expensive than one running a shell. Both now settle: the diff read publishes the branch it found, and the home cursor flips a bool on a timer the way the terminal's own does. The rest: - The tab sidebar and the right panel each capped themselves at half the window and knew nothing about the other, so together they could take all of it — 260 points of terminal on a 720-point window. Both now cap at whichever binds harder: half the window, or what is left after the terminal's floor and the other panel's floor. The same cap bounds the drag, so a panel dragged to its limit stays where it was dropped. - Only a HEAD diff may correct the sidebar's counts. Those numbers mean `git diff --numstat HEAD`; an unstaged or staged patch answers a smaller question, so opening an untracked file from the Source Control panel took the staged lines off the total on the click. - An untracked row in the diff overlay had no click target, and once focused could not be left — the breadcrumb looks the path up in `files`, where an untracked file has no entry. Both ends fixed. - A new pane keeps the name its directory was reached by. `cwd()` alone loses it: the shell falls back to `getcwd()`, so `/tmp/x` became `/private/tmp/x` in every tab opened from the first. `PWD` carries it, and POSIX has the shell discard a `PWD` that names the wrong directory, so this can correct the name and cannot invent one. - The settings search now sees into the Keybindings page, which is generated from the binding table rather than the static index — so searching for a feature finds its shortcut, and the page filters to the matches. Closes #444. - The settings reading column is centred rather than pinned to the nav: on a window as wide as the display it was made for, 640 points of settings sat beside 1600 points of nothing. - `New Workspace…` takes the ellipsis its three sibling actions already carry — it opens a form asking for a name and a host. Every fix has a test. The re-probe loop is pinned end-to-end with `render_probe::draws() == 0` against a real repository, confirmed to fail on the old behaviour before it was kept.
60 lines
2.7 KiB
Plaintext
60 lines
2.7 KiB
Plaintext
---
|
|
title: "Command palette"
|
|
description: "One key for every action in the app — including the ones with no shortcut."
|
|
---
|
|
|
|
<kbd>⌘ P</kbd> opens the command palette. Type to filter, <kbd>↑</kbd>
|
|
<kbd>↓</kbd> to move, <kbd>⏎</kbd> to run.
|
|
|
|
Every action tty7 can perform is in here, whether or not it has a keybinding —
|
|
which makes it the fastest way to reach the ones that deliberately ship unbound,
|
|
like pane resize and swap.
|
|
|
|
<Frame caption="Placeholder — screenshot: the command palette open over a terminal, grouped results">
|
|
<img src="/images/placeholder.svg" alt="The tty7 command palette" />
|
|
</Frame>
|
|
|
|
## What is in it
|
|
|
|
Results are grouped, and the groups are the map of the app:
|
|
|
|
| Group | Examples |
|
|
|---|---|
|
|
| **Tabs & Panes** | New Tab · New Worktree Tab… · Split Right · Zoom Pane · Focus Pane Left · Resize Pane Up · Swap Pane Next · Reopen Closed Tab · Copy Working Directory · Fork Session |
|
|
| **Workspaces** | New Workspace… · Switch Workspace… · Rename Workspace… · Stop Workspace… · Delete Workspace… |
|
|
| **View** | Show/Hide Left Sidebar · Show/Hide Right Panel · Show Code Panel · Tab Bar: Move to Top · Right Panel: Info / Changes / Files · Change Theme… · Enter Full Screen · Toggle Unified / Side-by-Side Diff |
|
|
| **Git** | Commit · Stage All Changes · Unstage All · Discard All · Create Branch… · Sync · Push · Pull · Fetch |
|
|
| **Terminal** | Clear Scrollback · Find in Terminal… · Find Next / Previous · Copy · Cut · Paste · Select All |
|
|
| **SSH** | Add Connection… · Manage Profiles… · Reconnect · Remote Files · Port Forwarding |
|
|
| **Agents** | Send Selection · Send Git Diff for Review · Copy Session ID |
|
|
| **Application** | Settings… · Keyboard Shortcuts · Check for Updates… · Documentation · Join the Discord · Report an Issue… · Restart Server… |
|
|
|
|
Entries that do something destructive say so under the name — *Delete
|
|
Workspace…* is subtitled "ends its shells and forgets the layout", *Restart
|
|
Server…* is "ends every running shell; layout is kept".
|
|
|
|
## Connecting from the palette
|
|
|
|
Type an SSH address and the palette offers to connect to it:
|
|
|
|
```
|
|
me@devbox
|
|
me@devbox:2222
|
|
[::1]:22
|
|
```
|
|
|
|
Saved profiles show up the same way — start typing the name. A host that only
|
|
exists in `~/.ssh/config` does not: import it into a profile first, or reach it
|
|
from the workspace switcher. [SSH →](/remote/ssh)
|
|
|
|
## Sending context to an agent
|
|
|
|
Two palette commands hand what is in front of you to the coding agent running in
|
|
the pane, as a ready-made prompt:
|
|
|
|
- **Agent: Send Selection** — the current selection.
|
|
- **Agent: Send Git Diff for Review** — the repository's `git diff`.
|
|
|
|
If no agent is running, tty7 says so rather than typing into your shell.
|
|
[Agents →](/agents/overview)
|