From 58271459401fa461707c042f7f03867ddcfff3ea Mon Sep 17 00:00:00 2001 From: Can Celik Date: Fri, 11 Sep 2026 00:55:19 +0300 Subject: feat: support conditional sidebar token hiding (#3925) --- src/config/sidebar.rs | 8 ++++---- src/config/sidebar/rules.rs | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) (limited to 'src/config') diff --git a/src/config/sidebar.rs b/src/config/sidebar.rs index 0b489765..9a4cb5e0 100644 --- a/src/config/sidebar.rs +++ b/src/config/sidebar.rs @@ -139,10 +139,10 @@ pub enum SpaceSidebarToken { } impl AgentSidebarToken { - pub(crate) fn style_for_value(&self, value: &str) -> SidebarTokenStyle { + pub(crate) fn style_for_value(&self, value: &str) -> Option { match self { Self::Styled { style, rules, .. } => rules::matching_style(rules, *style, value), - _ => SidebarTokenStyle::default(), + _ => Some(SidebarTokenStyle::default()), } } @@ -155,10 +155,10 @@ impl AgentSidebarToken { } impl SpaceSidebarToken { - pub(crate) fn style_for_value(&self, value: &str) -> SidebarTokenStyle { + pub(crate) fn style_for_value(&self, value: &str) -> Option { match self { Self::Styled { style, rules, .. } => rules::matching_style(rules, *style, value), - _ => SidebarTokenStyle::default(), + _ => Some(SidebarTokenStyle::default()), } } diff --git a/src/config/sidebar/rules.rs b/src/config/sidebar/rules.rs index 3ee72e56..049e0979 100644 --- a/src/config/sidebar/rules.rs +++ b/src/config/sidebar/rules.rs @@ -8,6 +8,7 @@ pub struct SidebarTokenRule { condition: Condition, ignore_case: bool, style: SidebarTokenStyle, + hide: Option, } // Deserialization rejects non-finite thresholds, so equality is reflexive. @@ -43,6 +44,8 @@ struct RawRule { bold: Option, #[serde(skip_serializing_if = "Option::is_none")] dim: Option, + #[serde(skip_serializing_if = "Option::is_none")] + hide: Option, } impl TryFrom for SidebarTokenRule { @@ -91,6 +94,7 @@ impl TryFrom for SidebarTokenRule { Ok(Self { condition, ignore_case: raw.ignore_case.unwrap_or(false), + hide: raw.hide, style: SidebarTokenStyle { fg: raw.fg, bold: raw.bold, @@ -107,6 +111,7 @@ impl From for RawRule { fg: rule.style.fg, bold: rule.style.bold, dim: rule.style.dim, + hide: rule.hide, ..Self::default() }; match rule.condition { @@ -171,18 +176,21 @@ pub(super) fn matching_style( rules: &[SidebarTokenRule], base: SidebarTokenStyle, value: &str, -) -> SidebarTokenStyle { +) -> Option { let mut numeric = None; for rule in rules { if rule.matches(value, &mut numeric) { - return SidebarTokenStyle { + if rule.hide == Some(true) { + return None; + } + return Some(SidebarTokenStyle { fg: rule.style.fg.or(base.fg), bold: rule.style.bold.or(base.bold), dim: rule.style.dim.or(base.dim), - }; + }); } } - base + Some(base) } #[cfg(test)] -- cgit v1.2.3