From 11058765bec3bb1e0510254904276d29d4fc31f1 Mon Sep 17 00:00:00 2001 From: thataboy Date: Thu, 26 Sep 2024 09:48:23 -0700 Subject: [PATCH] Add ability to separately set background color for highlighted brackets (#17566) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes https://github.com/zed-industries/zed/issues/16380 Currently brackets are highlighted with `editor.document_highlight.read_background`. This commit adds a separate `editor.document_highlight.bracket_background` theme setting so bracket highlights can be made more prominent without doing the same to other highlights, making the display too busy. (My own theme) https://github.com/user-attachments/assets/29a8c05e-2f1a-4c16-9be8-a4b4cb143548 I set defaults for light and dark theme that I hope are sensible and not too obnoxious, but noticeable so people can change it if they don't like it. Release Notes: - Added `editor.document_highlight.bracket_background` field to the theme to set background color of highlighted brackets. - This will fall back to `editor.document_highlight.read_background`, if not set. Screenshot 2024-09-08 at 8 46 57 AM Screenshot 2024-09-08 at 9 03 27 AM --------- Co-authored-by: Marshall Bowers --- .../editor/src/highlight_matching_bracket.rs | 2 +- crates/theme/src/default_colors.rs | 2 ++ crates/theme/src/one_themes.rs | 1 + crates/theme/src/schema.rs | 21 +++++++++++++++---- crates/theme/src/styles/colors.rs | 4 ++++ 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/crates/editor/src/highlight_matching_bracket.rs b/crates/editor/src/highlight_matching_bracket.rs index 67915d4d7b499..f63b363f34f47 100644 --- a/crates/editor/src/highlight_matching_bracket.rs +++ b/crates/editor/src/highlight_matching_bracket.rs @@ -32,7 +32,7 @@ pub fn refresh_matching_bracket_highlights(editor: &mut Editor, cx: &mut ViewCon opening_range.to_anchors(&snapshot.buffer_snapshot), closing_range.to_anchors(&snapshot.buffer_snapshot), ], - |theme| theme.editor_document_highlight_read_background, + |theme| theme.editor_document_highlight_bracket_background, cx, ) } diff --git a/crates/theme/src/default_colors.rs b/crates/theme/src/default_colors.rs index 4def0bb8d74d6..a7521bd374d1c 100644 --- a/crates/theme/src/default_colors.rs +++ b/crates/theme/src/default_colors.rs @@ -80,6 +80,7 @@ impl ThemeColors { editor_indent_guide_active: neutral().light_alpha().step_6(), editor_document_highlight_read_background: neutral().light_alpha().step_3(), editor_document_highlight_write_background: neutral().light_alpha().step_4(), + editor_document_highlight_bracket_background: green().light_alpha().step_5(), terminal_background: neutral().light().step_1(), terminal_foreground: black().light().step_12(), terminal_bright_foreground: black().light().step_11(), @@ -179,6 +180,7 @@ impl ThemeColors { editor_indent_guide_active: neutral().dark_alpha().step_6(), editor_document_highlight_read_background: neutral().dark_alpha().step_4(), editor_document_highlight_write_background: neutral().dark_alpha().step_4(), + editor_document_highlight_bracket_background: green().dark_alpha().step_6(), terminal_background: neutral().dark().step_1(), terminal_ansi_background: neutral().dark().step_1(), terminal_foreground: white().dark().step_12(), diff --git a/crates/theme/src/one_themes.rs b/crates/theme/src/one_themes.rs index 69e69ce23dc8d..50a4184e8bc93 100644 --- a/crates/theme/src/one_themes.rs +++ b/crates/theme/src/one_themes.rs @@ -102,6 +102,7 @@ pub(crate) fn one_dark() -> Theme { 0.2, ), editor_document_highlight_write_background: gpui::red(), + editor_document_highlight_bracket_background: gpui::green(), terminal_background: bg, // todo("Use one colors for terminal") diff --git a/crates/theme/src/schema.rs b/crates/theme/src/schema.rs index 0229b1ea98d59..91863061236f2 100644 --- a/crates/theme/src/schema.rs +++ b/crates/theme/src/schema.rs @@ -413,6 +413,12 @@ pub struct ThemeColorsContent { #[serde(rename = "editor.document_highlight.write_background")] pub editor_document_highlight_write_background: Option, + /// Highlighted brackets background color. + /// + /// Matching brackets in the cursor scope are highlighted with this background color. + #[serde(rename = "editor.document_highlight.bracket_background")] + pub editor_document_highlight_bracket_background: Option, + /// Terminal background color. #[serde(rename = "terminal.background")] pub terminal_background: Option, @@ -540,6 +546,10 @@ impl ThemeColorsContent { .border .as_ref() .and_then(|color| try_parse_color(color).ok()); + let editor_document_highlight_read_background = self + .editor_document_highlight_read_background + .as_ref() + .and_then(|color| try_parse_color(color).ok()); ThemeColorsRefinement { border, border_variant: self @@ -784,14 +794,17 @@ impl ThemeColorsContent { .editor_indent_guide_active .as_ref() .and_then(|color| try_parse_color(color).ok()), - editor_document_highlight_read_background: self - .editor_document_highlight_read_background - .as_ref() - .and_then(|color| try_parse_color(color).ok()), + editor_document_highlight_read_background, editor_document_highlight_write_background: self .editor_document_highlight_write_background .as_ref() .and_then(|color| try_parse_color(color).ok()), + editor_document_highlight_bracket_background: self + .editor_document_highlight_bracket_background + .as_ref() + .and_then(|color| try_parse_color(color).ok()) + // Fall back to `editor.document_highlight.read_background`, for backwards compatibility. + .or(editor_document_highlight_read_background), terminal_background: self .terminal_background .as_ref() diff --git a/crates/theme/src/styles/colors.rs b/crates/theme/src/styles/colors.rs index 0b37be09923c7..225275f37b619 100644 --- a/crates/theme/src/styles/colors.rs +++ b/crates/theme/src/styles/colors.rs @@ -171,6 +171,10 @@ pub struct ThemeColors { /// special attention. Usually a document highlight is visualized by changing /// the background color of its range. pub editor_document_highlight_write_background: Hsla, + /// Highlighted brackets background color. + /// + /// Matching brackets in the cursor scope are highlighted with this background color. + pub editor_document_highlight_bracket_background: Hsla, // === // Terminal