Skip to content

fix: no grey strip under the terminal's last row (#6) - #7

Merged
Maxaubert merged 1 commit into
mainfrom
fix/6-strip-under-last-row
Sep 19, 2026
Merged

Maxaubert merged 1 commit into
mainfrom
fix/6-strip-under-last-row

Conversation

@Maxaubert

Copy link
Copy Markdown
Owner

Closes #6.

The bug

Owner screenshot on the Pitch (black) theme: a grey bar along the bottom of the terminal.

xterm sizes itself in whole rows. MEASURED in the app: a 604px terminal inside a 611px box (15px at the owner's scale). The pixels under the last row belonged to a transparent element, so what showed there was the native window background, not the theme. The 4px frame round the terminal was painted; that leftover strip was not.

The fix

The panel paints the ground and xterm's canvas is clear:

  • TerminalPanel's box is bg-[var(--p-bg)] with 4px of padding (it was a transparent box with a --p-bg border).
  • currentTermTheme() hands xterm background: #00000000, plus a named cursorAccent: it defaults to the background, which on a clear canvas would make the character under a block cursor a hole. Checked on the page: the cursor draws its character in the theme's ground on the cursor colour.
  • Every pixel of the panel (rows, frame, leftover strip) gets exactly ONE coat, which is also what acrylic needs, and --p-bg already carries the window's alpha, so the acrylic path needs no special case any more.

Verification

  • The e2e theme scenario now MEASURES it: it finds the strip under the last row, walks up from the pixel to the first painted ground, and compares it with --p-bg-solid, in the dark default and again after switching to a light theme.
    • Against the OLD code: FAIL and it is the theme's ground (none vs 11,11,15) (nothing was painted there).
    • With the fix: 11,11,15 vs 11,11,15, and 244,244,244 after the switch.
  • npm run typecheck: clean. npm run lint: 0 errors. npm test: 265 pass. npm run e2e: 10 scenarios pass.
  • Installed on this machine as a local combination of this branch and Agent indicators follow the theme's accent; minimal by default (#4) #5 (so the indicator changes under test there were not taken away); exe timestamp polled (23:18:08 -> 08:06:56). That combined branch is local only and is not part of this PR.

Notes

  • Merges cleanly with Agent indicators follow the theme's accent; minimal by default (#4) #5 (tried locally; both touch CLAUDE.md and tools/e2e/run.mjs in different places).
  • The grey bar you may still see on the RIGHT while the pointer is over the terminal is xterm's own auto-hiding scrollbar; it is invisible once the pointer leaves (checked: invisible, opacity 0). Unchanged by this PR.
  • Unsigned. Version stays 0.1.0 (nothing released yet).

🤖 Generated with Claude Code

…he last row (#6)

xterm sizes itself in whole rows (measured: 604px in a 611px box), so the pixels
under the last row were a transparent element and showed the native window
background: a grey bar under a black theme. The panel now paints --p-bg and
xterm's canvas is clear, with cursorAccent named so the character under a block
cursor is not a hole. One coat per pixel, which is also what acrylic needs.
The e2e theme scenario measures the strip and fails on the old code.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@Maxaubert
Maxaubert merged commit 90a504a into main Sep 19, 2026
1 check passed
@Maxaubert
Maxaubert deleted the fix/6-strip-under-last-row branch September 19, 2026 06:30
Maxaubert added a commit that referenced this pull request Sep 25, 2026
…ns, what is on disk (#67) (#68)

- Paste is sanitised: no ESC or control can end the bracketed paste (#1).
- Windows tools are started by full path; main leaves its launch folder (#3).
- Paths are quoted for the shell they go to; cd quoting is complete (#5, #7).
- The updater installs main's own offer only, pre-answers the close at the
  quit, hears a failed handoff and removes its temp folder (#14, #15, #19).
- tabs.json and window.json are written atomically (#18).
- Command-line paths resolve against the typing folder; a drive root works
  (#16, #17). The DWM helper's stdin errors are heard (#13).
- The review and the three-PR plan are in docs/.


Claude-Session: https://claude.ai/code/session_01LJbePcRzre7AusNzPNS2Bk

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
github-actions Bot pushed a commit that referenced this pull request Sep 25, 2026
…ns, what is on disk (#67) (#68)

- Paste is sanitised: no ESC or control can end the bracketed paste (#1).
- Windows tools are started by full path; main leaves its launch folder (#3).
- Paths are quoted for the shell they go to; cd quoting is complete (#5, #7).
- The updater installs main's own offer only, pre-answers the close at the
  quit, hears a failed handoff and removes its temp folder (#14, #15, #19).
- tabs.json and window.json are written atomically (#18).
- Command-line paths resolve against the typing folder; a drive root works
  (#16, #17). The DWM helper's stdin errors are heard (#13).
- The review and the three-PR plan are in docs/.


Claude-Session: https://claude.ai/code/session_01LJbePcRzre7AusNzPNS2Bk

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

A grey strip under the terminal's last row

1 participant