mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-09-21 16:02:20 +00:00
* feat(window): dock the code panel and the diff overlay beside the terminal (#625) Opening a file covered the workspace. The terminal underneath kept running and was neither visible nor typeable, so reading a file while an agent talked was a toggle loop: open it, close it to read the reply, open it again. The Files tree already docks; the two surfaces you go to *from* it did not. They dock now, as a flex sibling of the terminal column rather than a narrower overlay — that distinction is the feature. `set_grid_size` is driven by the terminal element's laid-out bounds, so a column takes width away from the grid and the PTY reflows into what is left; a card painted over half the workspace would have left the grid full width with half of it hidden. `overlay_top` stops ordering a pair and starts choosing between them: a column has one child, and two `flex_1` siblings would split it and fight. Fill mode keeps the old vector, the old opaque paint and the old platform hoist untouched, so nothing about today's overlay changes for anyone who picks it. - Half the terminal column by default; drag the divider, double-click it to cycle a third / half / two thirds, or use the palette commands. Two thirds deliberately runs past the half-window cap the side panels obey — only the terminal's floor binds it. - `DOCUMENT_MIN_W` joins the width budget: both side panels reserve it the way they already reserve each other, and the column is derived from the *live* sidebar and panel widths rather than their floors, so a panel someone dragged wider is width the terminal keeps. - A window too narrow to seat both fills for that frame. The fallback is derived at render time and never stored, so widening re-docks on the next frame with nothing to undo. - Fill or dock is per tab, on the header's context menu. Reading a long file over the whole window in one tab while an agent keeps half of another is the normal case, and one global switch made each of those flip the other. A tab that has not been told reads `document_layout` from the config, which is what a fresh tab starts as — and which the menu therefore does not write, since every untold tab is reading it. - Everywhere but macOS the title bar spans the workspace, which left a bar's height of nothing above the column. The header is drawn into it, and behaves like the title bar it now sits in. With the detail panel closed the column reaches the window's right edge, so the header stops short of the trailing chrome through a width the tab strip's own reservation shares. - The docked headers drop the traffic-light inset they never had to clear, and the diff header's branch name becomes the thing that yields so the view toggle and the close tile survive a column's width. New in `config.json`: `document_ratio`, and `document_layout` for what a fresh tab starts as. Four new actions, bindable and unbound by default. * fix(window): hold the docked column to widths the strip and the file agree on Three defects in the document column, each with a guard test that fails without its fix. The tab strip did not know a column had taken width off it. On macOS the strip lives inside the terminal column and sizes itself to the window less the detail panel, so a docked document left it 340 points wider than the column it sits in and the chips ran on under the column — the same overrun the panel's own reservation was added for. Everywhere else the strip spans the workspace and the column's hoisted header is drawn over its trailing end with no fill of its own, so a chip left under it showed through the file name and stayed clickable through it. The column's width now comes off `strip_w` on macOS and off `corner_w` elsewhere, which is where the panel's already goes. The divider wrote widths the file would not keep. `Config::sanitize` holds `document_ratio` to 0.2..=0.8; the drag clamped in pixels only, so a column pushed against either edge of a wide window was saved outside that band and reopened somewhere else — on a 2560-point body, 232 points from where it was dropped. The band is a pair of shared constants now and the drag clamps to it, the way the font size and its stepper were made to agree in #550. The palette named the config's layout rather than the tab's. Fill is per tab, so a tab told to fill was still offered "Document: Fill Window" — a row that named the state it was already in and did the opposite. It reads the active tab through `ChromeState` now. Also: `document_layout`'s doc comment still described the global switch an earlier draft had, three lines after the field became a per-tab default.
104 lines
4.5 KiB
Plaintext
104 lines
4.5 KiB
Plaintext
---
|
||
title: "The side panel"
|
||
description: "Info, Source Control, and Files — plus the built-in editor."
|
||
---
|
||
|
||
<kbd>⌘ J</kbd> opens a panel on the right of the window with three tabs. It is
|
||
hidden by default; whichever tab you leave it on is where it opens next time.
|
||
|
||
The three icons at the top switch tabs, and clicking the lit one puts the panel
|
||
away again.
|
||
|
||
<Frame caption="Placeholder — screenshot: the side panel showing the Info tab beside a terminal">
|
||
<img src="/images/placeholder.svg" alt="The tty7 side panel" />
|
||
</Frame>
|
||
|
||
## Info
|
||
|
||
Everything tty7 knows about the focused pane, in one column:
|
||
|
||
| Section | What it shows |
|
||
|---|---|
|
||
| **Session** | working directory, shell, SSH connection, git branch, `+N −M` changes, and the coding agent with its status (idle / working / waiting / done) |
|
||
| **Processes** | the process tree inside the pane, with the foreground process marked |
|
||
| **Ports** | every port those processes are listening on |
|
||
|
||
Hovering a row shows what it can do at the right-hand end of it: **Copy** on the
|
||
working directory, the SSH host and the branch, and **Reveal in Finder** / **Open
|
||
Folder** alongside it on a working directory this machine can see. The `+N −M`
|
||
counts open the [diff overlay](/git/diffs), the same click the sidebar's counts
|
||
answer to — and the same **Settings → Window & Tabs → Open diff preview from
|
||
sidebar counts** turns both of them back into plain text.
|
||
|
||
The ports section is the quickest answer to "what is this pane serving, and
|
||
where" — the same data `tty7 procs` prints. A port row copies `localhost:PORT`,
|
||
and on a local pane opens it in your browser.
|
||
|
||
## Source Control
|
||
|
||
The git panel for the focused pane's repository, in four groups — **Merge
|
||
Changes**, **Staged Changes**, **Changes**, **Untracked**. Write a message,
|
||
commit, and push without leaving the window.
|
||
|
||
[Source control →](/git/source-control)
|
||
|
||
## Files
|
||
|
||
A file tree rooted at the pane's working directory, with git status decorations
|
||
on every row and a search box at the top. The search box carries a clear button
|
||
while there is something in it.
|
||
|
||
- **Click a file** to open it in the built-in editor.
|
||
- **Drag a file out** to Finder or Explorer to copy it there.
|
||
- **Drag files in** from the desktop to copy them into the folder under the
|
||
cursor. A folder row takes them itself, a file row stands in for the folder
|
||
holding it, and the empty space below the tree means the top of it. Folders
|
||
come in whole, the executable bit survives, and a name that is already taken
|
||
is asked about rather than replaced.
|
||
|
||
Both directions work over a [remote workspace](/remote/workspaces) too, reading
|
||
on one machine and writing on the other, up to the size one control frame can
|
||
carry — past that the panel tells you to use [SFTP](/remote/sftp).
|
||
|
||
## The editor
|
||
|
||
<kbd>⌘ ⇧ E</kbd> toggles the code panel; clicking a file in the Files tab opens
|
||
it there. It is a real editor — syntax highlighting, line and column readout,
|
||
wrap toggle, and a Markdown preview — meant for the edit you would otherwise
|
||
have opened `vim` for.
|
||
|
||
| | |
|
||
|---|---|
|
||
| <kbd>⌘ S</kbd> | Save |
|
||
| <kbd>Esc</kbd> | Back to the terminal |
|
||
|
||
Files are watched on disk: a change underneath you is picked up, and closing
|
||
with unsaved edits asks before discarding them. Files over 4 MB and anything
|
||
that looks binary are refused with a note rather than opened badly.
|
||
|
||
### Where it opens
|
||
|
||
The editor docks beside the terminal, taking half the space between the sidebar
|
||
and the right panel. The terminal keeps running, stays visible, and stays
|
||
typeable — click it, read what your agent said, click back. Diffs open in the
|
||
same column.
|
||
|
||
Drag the divider for any width between a fifth and four fifths of that space —
|
||
the range `document_ratio` keeps — or double-click it to cycle a third, a half
|
||
and two thirds. **Document: Third / Half / Two-Thirds Width** in the command
|
||
palette do the same. On a narrow window the terminal's own floor stops the
|
||
divider sooner.
|
||
|
||
Right-click the document's header for **Fill window**, which is the old
|
||
full-workspace overlay, unchanged. **Document: Fill Window** and **Document:
|
||
Dock Beside Terminal** in the palette are the same switch.
|
||
|
||
Fill or dock is **per tab**: read a long file over the whole window in one tab
|
||
while an agent keeps half of another, and neither moves the other. A fresh tab
|
||
starts from `document_layout` in `config.json`. The width is shared, and
|
||
persists as `document_ratio`.
|
||
|
||
A window too narrow to give both the terminal and the document a readable width
|
||
fills for that file only — widen it and the column comes back, without your
|
||
setting having changed.
|