Repository navigation
Links in the terminal are highlighted, in a colour that adapts to the theme (#10) - #11
Merged
Merged
Conversation
…adapts to the theme (#10) xterm's link addon marks a link only under the pointer. Links are now painted with a decoration per row: the link colour as the foreground and a faint underline. The colour is blue, moved only as far as the theme's ground needs to reach 4.5:1, so it holds on every preset and on a custom background. Scrollback is painted once; the live screen is repainted each pass, so a row a TUI rewrote never keeps a stale run. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Maxaubert
added a commit
that referenced
this pull request
Sep 25, 2026
…2e harness (#71) (#72) Settings: the colour editor saves the whole setup into Custom and is a theme pick (#8, #29); ThemeSwitchAsk registers once (#22); a hex field commits only a changed draft (#26); the dictation key is never a key that types or a chord the terminal owns, and a press elsewhere ends the capture (#27); the editor takes the focus, traps Tab and hears Escape, the pencil is its own button (#28); a finished download reads fresh state before picking the model (#30). Release and CI: release.yml tags the built commit (#11); core-release runs from main only (#34), waits for terminal-gate by name and its success (#38), and opens an issue when a core change cannot be released; core-version also requires the core version above the base's (#39). Harness: a time limit per scenario and closeApp (#35), profiles removed after each scenario (#36), the poll's first verdict awaited instead of 6 s (#37). Core 0.15.3, app 0.18.3. New reviewSettings e2e and unit tests. 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
…2e harness (#71) (#72) Settings: the colour editor saves the whole setup into Custom and is a theme pick (#8, #29); ThemeSwitchAsk registers once (#22); a hex field commits only a changed draft (#26); the dictation key is never a key that types or a chord the terminal owns, and a press elsewhere ends the capture (#27); the editor takes the focus, traps Tab and hears Escape, the pencil is its own button (#28); a finished download reads fresh state before picking the model (#30). Release and CI: release.yml tags the built commit (#11); core-release runs from main only (#34), waits for terminal-gate by name and its success (#38), and opens an issue when a core change cannot be released; core-version also requires the core version above the base's (#39). Harness: a time limit per scenario and closeApp (#35), profiles removed after each scenario (#36), the poll's first verdict awaited instead of 6 s (#37). Core 0.15.3, app 0.18.3. New reviewSettings e2e and unit tests. Claude-Session: https://claude.ai/code/session_01LJbePcRzre7AusNzPNS2Bk Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #10.
What it does
A URL printed in the terminal is highlighted all the time, not only while the pointer is on it: the link colour, plus a faint underline. A click still opens it (that part was already there).
The colour
Blue by default (
LINK_BLUE,#4ea1ff), moved only as far as the ground needs to reach 4.5:1:rgb(52,106,168)at 5.1:1, measured on the page);The underline is there for the last case: on a theme where the colour has to move close to the text's, a link is still told apart.
How
lib/termLinks.ts(pure, tested):findLinksandlinkColor. A sentence's full stop or comma, and a closing bracket the link never opened, are given back to the sentence, so(https://a.io/x).is a link in brackets while.../Prism_(optics)keeps its own.lib/termLinkPaint.ts: an xterm DECORATION per row a link sits on (foreground colour + an underline element withpointer-events: none). Scrollback is immutable, so its links are painted once and ride a marker; the live screen is redrawn in place by TUIs, so each pass repaints from the last finished line down, which is what keeps a rewritten row from carrying a stale blue run. Rebuilt on a resize (reflow) and a theme change; off on the alternate screen. Columns are counted in cells, since a wide character is one character and two cells.Verification
npm test: 355 pass (48 new).linkColorclears 4.5:1 on all 39 presets' own grounds, on four blue grounds, and on a non-hex ground.links, reading computed colours off the page: a printed link wears the blue; the sentence's full stop does not; a 280-character link that wraps is painted on every row; switching to a light theme gives another colour that reads there and is still a blue.npm run typecheck: clean.npm run lint: 0 errors.npm run e2e: 12 scenarios pass.Notes
🤖 Generated with Claude Code