mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-10-04 00:02:04 +00:00
* fix(ui): draw every confirmation as the app's own dialog card
window.prompt fell through to NSAlert on macOS and TaskDialog on Windows,
so closing a busy tab threw up a system alert with a centred app icon and
stacked grey buttons while every other question the app asks is a
ui::dialog card. The Linux fallback card had drifted too (accent buttons,
its own padding).
TextPrompt is now built from ui::dialog on all three platforms: the 12px
card at the switcher's top offset, a wrapping title row with an esc cap,
a hairline footer and ink-filled primary. Return and Escape keep the
native meanings; the scrim occludes the window and backs out; a lone OK
answers Escape; an answer listed after Cancel in a prompt of three stands
apart at the footer's left, and an action behind a Cancel-first default
is painted red.
SCM's discard and destructive-op prompts passed Cancel as a bare label,
which gpui only recognises as a cancel when it is the English word; they
now mark it explicitly.
* fix(ui): show the settings window's toasts and title git failures
The settings window is a gpui Root of its own but never rendered the
notification layer, so everything the page reported (an ssh_config
import, a passphrase it could not store) was pushed into a layer nobody
drew.
A failed git op was toasted as one bare stderr line
('push: fatal: ...'). It is now an error toast titled 'git push failed'
with git's reason, severity prefix dropped, beneath it.
* fix(settings): one control language down the right-hand column
The page had drifted from the design system: dropdowns and secondary
buttons were raised white with a drop shadow, fields had a half-pixel
inset ring that anti-aliased to nothing on a 1x display (the shell and
proxy rows read as loose monospace text), and dropdowns sized to their
value beside fixed-width fields, so the column's left edge zig-zagged.
Fields, dropdowns, secondary buttons, steppers and search fields now all
stand on the theme's muted well with no outline or shadow; a field shows
a ring only for focus (accent) or error. Fields and dropdowns are 28px
and one width (kit::CONTROL_W); only path and command fields are wider.
Field text is sized on the Input itself, since its own text_sm outranked
the size set around it. A host saved under its own address no longer
repeats it as a subtitle.
* fix(ui): tidy menus, the switcher and the editor's conflict strip
- New Tab menu: host endpoints elide against fixed caps instead of being
clipped mid-glyph at the panel edge; notes are right-aligned again.
- Switcher: a workspace's tab count reads '1 tab', not a bare 1 beside
the slot number.
- Editor 'changed on disk' strip: neutral with an amber dot and dialog
buttons, Keep mine as the safe primary, instead of an amber wash with a
library-default outlined button.
- Title bar search keeps its full label with a document docked.
* fix(search): a command named in the query leads over a session that says it
'worktree' then Return resumed a past agent session instead of opening
New Worktree Tab. Two causes:
- The fuzzy scorer matched greedily from the left, so the query's first
letter was spent on any earlier occurrence ('New') and the rest
scattered: a title containing the whole word scored as a poor match.
It now tries every position the first letter occurs and keeps the
best; the leftmost alignment is one of those, so no score drops.
- Session titles are whatever was first typed to an agent, and those
often open with a command's name, taking the prefix bonus. On the All
tab the Sessions section now stands back by a little more than that
bonus when sections are ordered; a session still leads when it is
plainly the better answer, and the Sessions tab ranks untouched.
* fix(ui): dialog wells and mono detail that hold up in the dark
Dialog fields, info wells, keycaps and disabled filled buttons used the
theme's muted fill, a step off the window. Cards sit on the popover
surface, which a dark theme lifts to about the same value, so every
field on a dialog lost its shape. They now take the card's own next
rung.
The host-key fingerprint and the worktree path preview asked for the
'monospace' family, which gpui resolves as a literal family name and
falls back from; they use the theme's mono family.
* fix(ui): one way to draw a shortcut
- Every chord is one cap per key. The home page and the switcher's
footer packed theirs into a single cap (⇧⌘T, ⌘↵) beside Search
Everywhere's ⌘ T; dialog::chord is the one spelling now, and the
switcher's private copy of dialog::keycap is gone.
- On macOS modifiers are listed ⌃ ⌥ ⇧ ⌘ whatever order the binding was
written in, as the menu bar lists them; the palette read ⌘ ⇧ D.
- Return is ↵ everywhere; key_tokens alone drew ⏎.
* fix(ui): file errors as titled error toasts; say a delete is for good
HostOps::notify_err ran its context and the reason together as one
plain line ('Could not delete a.txt: You do not have permission.').
Every context it is given is already a sentence about what failed, so
it is now the title of an error toast and the reason sits under it. The
'{context}: {error}' template is gone with its last caller.
The delete confirmation's detail repeated its title ('The file will be
deleted.'). The remove is permanent, not a move to the Trash, and that
is the one thing worth saying there.
* fix(ui): every failure toast says what failed, why, and that it failed
About twenty toasts reported failures as one plain line with no
severity: 'Could not open a terminal: <why>', 'Couldn't forward :3000 —
<why>', 'SSH reconnect failed: <why>'. host_ops::failure turns such a
sentence into an error toast, taking what failed as the title and the
reason beneath it. It splits the formatted text rather than the
templates, because some of them are also shown whole (the home screen
keeps the start-up failure on screen), and a reason that is not at the
end leaves the sentence whole.
Waking a tab and reopening one are errors too; tabs that could not be
restored are a warning.
* fix(settings): a primary with nothing to do rests on the well
A disabled or not-yet-dirty primary (the host form's Save) was the ink
button faded to 45-55%: a washed-out black button that still looked
like the thing to press. It now sinks to the well with secondary text,
the fall the dialogs' Create and the Git panel's Commit take, and turns
ink once there is something to save.
* fix(settings): the shortcuts page's way back is drawn, and its title lines up
The back link to Keyboard & Mouse was pulled up out of the page column
with negative margins, above the scroll area's clip, so it was never
drawn - the page had no visible way back - while the rest of its height
pushed the title 16px below every other page's. It now sits in the
title-bar band, and the title is where the others are.
* fix(settings): searchable dropdowns say they can be searched
The filter field shared by the page's searchable dropdowns (themes,
shells) had no placeholder, so it read as a stray caret between the
preview and the list.
* fix(i18n): no stray space before the default shell in zh and ja
The shell intro put a space before {default}, meant for a Latin shell
name, but the default is the localized 'your login shell', so zh read
'留空则使用 你的登录 shell'. The ja sentence also ended on the bare
noun.
* fix(settings): action menus don't reserve a column for a tick
Every settings menu kept an empty tick column, so a menu of actions
(an agent's Reinstall / Reveal / Uninstall) set its labels 24px in from
a 12px right edge. The column is kept only when some entry is ticked -
a choice menu - and an action menu is padded evenly.
* refactor(settings): drop the raised-control paint nothing uses now
Tk::btn and Tk::raised_hover lost their last callers when the page's
controls moved onto the well. Also corrects two comments that described
the old field ring and claimed more than was observed.
* revert(settings): keep the v4 Settings design's controls
The earlier commits on this branch moved the settings page's dropdowns,
buttons, steppers and fields onto flat outline-less wells, following
docs/design-system.md. That paragraph predates the v4 Settings design
the page was rebuilt to on 2026-09-26 (raised controls, hairline-ringed
fields) and was never updated to it, so the change took the page away
from the design rather than toward it. The raised controls, 26px
heights and the faded disabled primary are back as v4 drew them, and
the design-system edits are withdrawn.
Kept, as fixes within the design:
- dropdowns and fields share one width (kit::CONTROL_W);
- the field's value is sized on the Input, which otherwise beat it;
- the field hairline is one device pixel: v4's half point is one pixel
on Retina and nothing at all on a 1x display.
* fix(settings): a primary with nothing to do falls to the faint fill
A disabled or not-yet-dirty primary (the host form's Save) was the ink
button faded to half opacity - still a black button that looked like
the thing to press. It now takes the fall v4 already gives the Commit
button and the dialogs' Create: faint fill, secondary text, ink again
once there is something to do.
* fix(settings): tab position rows are dropdowns again
#982 moved New tab position and Tab bar position into General with the
segmented control they had before #979 made every pick-one setting a
dropdown, so General mixed the two again. Both use settings_choice.
* fix(scm): the Changes list sits on the same rhythm as the Files tab
- The filter was appended to the pinned block without the pause the
blocks above carry, and the list starts flush, so the first group
header sat on the field's edge (0px) while 14px stood above it. It
now leaves the Files tab's 10px under its search.
- File rows (working tree and commit detail) padded 3px above and below
a 23px line box, standing 29 tall - 30px pitch - beside the tree's
26px directory rows and the Files tab's 26px rows. They are ROW_H,
26, as v4 specifies.