From 0070635b4de672af2510df73d8bbd2f1c8f92cce Mon Sep 17 00:00:00 2001 From: Albert Marashi Date: Wed, 18 Sep 2024 02:21:31 +0930 Subject: [PATCH] Styling option for separating terminal view background from background color (#17611) Closes #17313 Release Notes: - Added theme styling option to separate terminal background view from terminal background color, for transparent terminal backgrounds --- crates/repl/src/outputs/plain.rs | 2 +- crates/terminal_view/src/terminal_element.rs | 6 +++--- crates/theme/src/default_colors.rs | 2 ++ crates/theme/src/one_themes.rs | 1 + crates/theme/src/schema.rs | 8 ++++++++ crates/theme/src/styles/colors.rs | 5 ++++- 6 files changed, 19 insertions(+), 5 deletions(-) diff --git a/crates/repl/src/outputs/plain.rs b/crates/repl/src/outputs/plain.rs index 5b9960d7b8..4bf007b292 100644 --- a/crates/repl/src/outputs/plain.rs +++ b/crates/repl/src/outputs/plain.rs @@ -75,7 +75,7 @@ pub fn text_style(cx: &mut WindowContext) -> TextStyle { font_size: theme::get_buffer_font_size(cx).into(), font_style: FontStyle::Normal, line_height: cx.line_height().into(), - background_color: Some(theme.colors().terminal_background), + background_color: Some(theme.colors().terminal_ansi_background), white_space: WhiteSpace::Normal, truncate: None, // These are going to be overridden per-cell diff --git a/crates/terminal_view/src/terminal_element.rs b/crates/terminal_view/src/terminal_element.rs index b3d2b40e74..ce4be0e679 100644 --- a/crates/terminal_view/src/terminal_element.rs +++ b/crates/terminal_view/src/terminal_element.rs @@ -662,7 +662,7 @@ impl Element for TerminalElement { font_size: font_size.into(), font_style: FontStyle::Normal, line_height: line_height.into(), - background_color: Some(theme.colors().terminal_background), + background_color: Some(theme.colors().terminal_ansi_background), white_space: WhiteSpace::Normal, truncate: None, // These are going to be overridden per-cell @@ -778,7 +778,7 @@ impl Element for TerminalElement { &[TextRun { len, font: text_style.font(), - color: theme.colors().terminal_background, + color: theme.colors().terminal_ansi_background, background_color: None, underline: Default::default(), strikethrough: None, @@ -1158,7 +1158,7 @@ pub fn convert_color(fg: &terminal::alacritty_terminal::vte::ansi::Color, theme: NamedColor::BrightCyan => colors.terminal_ansi_bright_cyan, NamedColor::BrightWhite => colors.terminal_ansi_bright_white, NamedColor::Foreground => colors.terminal_foreground, - NamedColor::Background => colors.terminal_background, + NamedColor::Background => colors.terminal_ansi_background, NamedColor::Cursor => theme.players().local().cursor, NamedColor::DimBlack => colors.terminal_ansi_dim_black, NamedColor::DimRed => colors.terminal_ansi_dim_red, diff --git a/crates/theme/src/default_colors.rs b/crates/theme/src/default_colors.rs index 48e67a4cc0..4def0bb8d7 100644 --- a/crates/theme/src/default_colors.rs +++ b/crates/theme/src/default_colors.rs @@ -84,6 +84,7 @@ impl ThemeColors { terminal_foreground: black().light().step_12(), terminal_bright_foreground: black().light().step_11(), terminal_dim_foreground: black().light().step_10(), + terminal_ansi_background: neutral().light().step_1(), terminal_ansi_bright_black: black().light().step_11(), terminal_ansi_bright_red: red().light().step_10(), terminal_ansi_bright_green: green().light().step_10(), @@ -179,6 +180,7 @@ impl ThemeColors { editor_document_highlight_read_background: neutral().dark_alpha().step_4(), editor_document_highlight_write_background: neutral().dark_alpha().step_4(), terminal_background: neutral().dark().step_1(), + terminal_ansi_background: neutral().dark().step_1(), terminal_foreground: white().dark().step_12(), terminal_bright_foreground: white().dark().step_11(), terminal_dim_foreground: white().dark().step_10(), diff --git a/crates/theme/src/one_themes.rs b/crates/theme/src/one_themes.rs index 241344b8f3..69e69ce23d 100644 --- a/crates/theme/src/one_themes.rs +++ b/crates/theme/src/one_themes.rs @@ -105,6 +105,7 @@ pub(crate) fn one_dark() -> Theme { terminal_background: bg, // todo("Use one colors for terminal") + terminal_ansi_background: crate::black().dark().step_12(), terminal_foreground: crate::white().dark().step_12(), terminal_bright_foreground: crate::white().dark().step_11(), terminal_dim_foreground: crate::white().dark().step_10(), diff --git a/crates/theme/src/schema.rs b/crates/theme/src/schema.rs index a47dc23a7c..cc62e2976b 100644 --- a/crates/theme/src/schema.rs +++ b/crates/theme/src/schema.rs @@ -421,6 +421,10 @@ pub struct ThemeColorsContent { #[serde(rename = "terminal.foreground")] pub terminal_foreground: Option, + /// Terminal ansi background color. + #[serde(rename = "terminal.ansi.background")] + pub terminal_ansi_background: Option, + /// Bright terminal foreground color. #[serde(rename = "terminal.bright_foreground")] pub terminal_bright_foreground: Option, @@ -792,6 +796,10 @@ impl ThemeColorsContent { .terminal_background .as_ref() .and_then(|color| try_parse_color(color).ok()), + terminal_ansi_background: self + .terminal_ansi_background + .as_ref() + .and_then(|color| try_parse_color(color).ok()), terminal_foreground: self .terminal_foreground .as_ref() diff --git a/crates/theme/src/styles/colors.rs b/crates/theme/src/styles/colors.rs index 349a79ba66..04aba89a0d 100644 --- a/crates/theme/src/styles/colors.rs +++ b/crates/theme/src/styles/colors.rs @@ -175,7 +175,7 @@ pub struct ThemeColors { // === // Terminal // === - /// Terminal background color. + /// Terminal layout background color. pub terminal_background: Hsla, /// Terminal foreground color. pub terminal_foreground: Hsla, @@ -184,6 +184,9 @@ pub struct ThemeColors { /// Dim terminal foreground color. pub terminal_dim_foreground: Hsla, + /// Terminal ansi background color. + pub terminal_ansi_background: Hsla, + /// Black ANSI terminal color. pub terminal_ansi_black: Hsla, /// Bright black ANSI terminal color.