aboutsummaryrefslogtreecommitdiff
path: root/src/config
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-09-11 00:55:19 +0300
committerGitHub <noreply@github.com>2026-09-11 00:55:19 +0300
commit58271459401fa461707c042f7f03867ddcfff3ea (patch)
treed8ae601d636858d9fafba62332870144059b2a3b /src/config
parent043b804c44665b07bd503fdad896bbe0a29311a0 (diff)
feat: support conditional sidebar token hiding (#3925)
Diffstat (limited to 'src/config')
-rw-r--r--src/config/sidebar.rs8
-rw-r--r--src/config/sidebar/rules.rs16
2 files changed, 16 insertions, 8 deletions
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<SidebarTokenStyle> {
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<SidebarTokenStyle> {
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<bool>,
}
// Deserialization rejects non-finite thresholds, so equality is reflexive.
@@ -43,6 +44,8 @@ struct RawRule {
bold: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
dim: Option<bool>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ hide: Option<bool>,
}
impl TryFrom<RawRule> for SidebarTokenRule {
@@ -91,6 +94,7 @@ impl TryFrom<RawRule> 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<SidebarTokenRule> 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<SidebarTokenStyle> {
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)]