aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src/theme.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-view/src/theme.rs')
-rw-r--r--helix-view/src/theme.rs21
1 files changed, 16 insertions, 5 deletions
diff --git a/helix-view/src/theme.rs b/helix-view/src/theme.rs
index c32b3edf..aaef28b2 100644
--- a/helix-view/src/theme.rs
+++ b/helix-view/src/theme.rs
@@ -268,18 +268,29 @@ impl ThemePalette {
value
.as_str()
.and_then(|s| s.parse().ok())
- .ok_or(format!("Theme: invalid underline-style: {}", value))
+ .ok_or(format!("Theme: invalid underline style: {}", value))
}
pub fn parse_style(&self, style: &mut Style, value: Value) -> Result<(), String> {
if let Value::Table(entries) = value {
- for (name, value) in entries {
+ for (name, mut value) in entries {
match name.as_str() {
"fg" => *style = style.fg(self.parse_color(value)?),
"bg" => *style = style.bg(self.parse_color(value)?),
- "underline-color" => *style = style.underline_color(self.parse_color(value)?),
- "underline-style" => {
- *style = style.underline_style(Self::parse_underline_style(&value)?)
+ "underline" => {
+ let table = value
+ .as_table_mut()
+ .ok_or("Theme: underline must be table")?;
+ if let Some(value) = table.remove("color") {
+ *style = style.underline_color(self.parse_color(value)?);
+ }
+ if let Some(value) = table.remove("style") {
+ *style = style.underline_style(Self::parse_underline_style(&value)?);
+ }
+
+ if let Some(attr) = table.keys().next() {
+ return Err(format!("Theme: invalid underline attribute: {attr}"));
+ }
}
"modifiers" => {
let modifiers = value