Skip to content

mods/diff: pinned header with body-only scroll, the built-in's list and base chords, wheel routing, and the DiffDialog off fullscreen - #94184

Merged
poteat merged 22 commits into
mainfrom
poteat/diff-parity-2
Sep 14, 2026
Merged

poteat merged 22 commits into
mainfrom
poteat/diff-parity-2

Conversation

@poteat

@poteat poteat commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

The docked pane now matches the built-in /diff panel frame for frame: the header, base line and 8-row file list stay pinned while the wheel moves the hunks 3 rows a tick, or the list a file a tick when the pointer is over an overflowing list; ctrl/opt+↑↓ and ctrl+x b work from the prompt through Buttons declaring the existing app:diffFileListUp/Down and app:cycleDiffBase actions (the base Select is gone; the base line uses the built-in's wording); rows are grey; toasts are held while it is open. Without the fullscreen layout, /diff opens the DiffDialog's layout inline instead — focused, sized to its content, at any width: ❯ on the selected row via autoFocus, ↑/↓ walk it through ui.focus with the 5-row window re-centring and clamping like DiffFileList, Enter shows the file, Esc backs out then dismisses. Renames list as git prints them, files sort as the panel sorts them, and a file that turned up during the session counts as session work. Declarations regenerated for presentation, action, dimColor, closeOnEscape, holdToasts, rows, by, contentRows, pointer, autoFocus and ui.focus.

Tests: claude plugin test mods/diff 135 pass (sec-default 16, telemetry 11); frame-vs-frame drive against the built-in, 106 rows: 31 identical, 72 cosmetic (engine chrome: close-mark row, dock grip, inline border, ring highlight, the 'opt+↓' hint literal, the dismissal log line), 3 behavioral (the pane focus model: a docked pane can take keys; Tab walks the dialog's ring).

…turned up since the start is session work, and each file but the diff's last keeps git's closing line
…le's hunks under an eight-row list, rows that scroll to their file, no focus or close mark of its own, /diff's transcript line) and the inline pane as its dialog
…rsing, so hunks parsed for another backend stay as printed
…ction and dimColor, a pane's closeOnEscape and holdToasts, and ui.scroll's by and contentRows; the command fixtures name their presentation
…them three rows a tick (the pane answers ui.scroll itself), the list keys and ctrl+x b press Buttons that declare the built-in's actions, rows rest grey, toasts are held, and without the fullscreen layout /diff opens the built-in dialog's shape inline, focused, at any width
… its window, and off fullscreen /diff opens the dialog, lists five files a page and shows one alone
….scroll's pointer), and the dialog opens as tall as its content (ui.open's rows)
… the ring's walk selects, the five rows re-centring on it as the built-in's do (ui.focus)
# Conflicts:
#	mods/diff/hooks/register.ts
#	mods/diff/hooks/views/detail/code-blocks-of/code-blocks-of.ts
#	mods/diff/tests/fixtures/git-in.ts
#	mods/diff/tests/fixtures/in-repository.ts
#	mods/diff/tests/fixtures/index.ts
#	mods/telemetry/tests/fixtures/index.ts
…leaf's cap, draw only their lines in view, and stop at the tree's budget
@poteat
poteat merged commit f4ceeec into main Sep 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants