Automatically adjust ANSI color contrast (#34033)
Closes #33253 in a way that doesn't regress #32175 - namely, automatically adjusts the contrast between the foreground and background text in the terminal such that it's above a certain threshold. The threshold is configurable in settings, and can be set to 0 to turn off this feature and use exactly the colors the theme specifies even if they are illegible. ## One Light Theme Before <img width="220" alt="Screenshot 2025-07-07 at 6 00 47 PM" src="https://github.com/user-attachments/assets/096754a6-f79f-4fea-a86e-cb7b8ff45d60" /> (Last row is highlighted because otherwise the text is unreadable; the foreground and background are the same color.) ## One Light Theme After (This is with the new default contrast adjustment setting.) <img width="215" alt="Screenshot 2025-07-07 at 6 22 02 PM" src="https://github.com/user-attachments/assets/b082fefe-76f5-4231-b704-ff387983a3cb" /> This approach was inspired by @mitchellh's use of automatic contrast adjustment in [Ghostty](https://ghostty.org/) - thanks, Mitchell! The main difference is that we're using APCA's formula instead of WCAG for [these reasons](https://khan-tw.medium.com/wcag2-are-you-still-using-it-ui-contrast-visibility-standard-readability-contrast-f34eb73e89ee). Release Notes: - Added automatic dynamic contrast adjustment for terminal foreground and background colors
This commit is contained in:
parent
877ef5e1b1
commit
9b7632d5f6
6 changed files with 669 additions and 8 deletions
|
@ -1352,7 +1352,7 @@
|
|||
// 5. Never show the scrollbar:
|
||||
// "never"
|
||||
"show": null
|
||||
}
|
||||
},
|
||||
// Set the terminal's font size. If this option is not included,
|
||||
// the terminal will default to matching the buffer's font size.
|
||||
// "font_size": 15,
|
||||
|
@ -1369,6 +1369,21 @@
|
|||
// Default: 10_000, maximum: 100_000 (all bigger values set will be treated as 100_000), 0 disables the scrolling.
|
||||
// Existing terminals will not pick up this change until they are recreated.
|
||||
// "max_scroll_history_lines": 10000,
|
||||
// The minimum APCA perceptual contrast between foreground and background colors.
|
||||
// APCA (Accessible Perceptual Contrast Algorithm) is more accurate than WCAG 2.x,
|
||||
// especially for dark mode. Values range from 0 to 106.
|
||||
//
|
||||
// Based on APCA Readability Criterion (ARC) Bronze Simple Mode:
|
||||
// https://readtech.org/ARC/tests/bronze-simple-mode/
|
||||
// - 0: No contrast adjustment
|
||||
// - 45: Minimum for large fluent text (36px+)
|
||||
// - 60: Minimum for other content text
|
||||
// - 75: Minimum for body text
|
||||
// - 90: Preferred for body text
|
||||
//
|
||||
// Most terminal themes have APCA values of 40-70.
|
||||
// A value of 45 preserves colorful themes while ensuring legibility.
|
||||
"minimum_contrast": 45
|
||||
},
|
||||
"code_actions_on_format": {},
|
||||
// Settings related to running tasks.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue