diff --git a/ui/src/conf/themes.rs b/ui/src/conf/themes.rs index 60794bc6..9a113689 100644 --- a/ui/src/conf/themes.rs +++ b/ui/src/conf/themes.rs @@ -232,8 +232,12 @@ impl<'de> Deserialize<'de> for ThemeValue { where D: Deserializer<'de>, { - if let Ok(s) = ::deserialize(deserializer) { - Ok(ThemeValue::Value(s)) + if let Ok(s) = ::deserialize(deserializer) { + if let Ok(c) = Attr::from_string_de::<'de, D>(s.clone()) { + Ok(ThemeValue::Value(c)) + } else { + Ok(ThemeValue::Link(s.into())) + } } else { Err(de::Error::custom("invalid theme attribute value")) } diff --git a/ui/src/terminal/cells.rs b/ui/src/terminal/cells.rs index 58b5c806..b8291d71 100644 --- a/ui/src/terminal/cells.rs +++ b/ui/src/terminal/cells.rs @@ -1397,17 +1397,7 @@ impl<'de> Deserialize<'de> for Attr { D: Deserializer<'de>, { if let Ok(s) = ::deserialize(deserializer) { - match s.as_str() { - "Default" => Ok(Attr::Default), - "Bold" => Ok(Attr::Bold), - "Underline" => Ok(Attr::Underline), - "BoldUnderline" => Ok(Attr::BoldUnderline), - "Reverse" => Ok(Attr::Reverse), - "BoldReverse" => Ok(Attr::BoldReverse), - "UnderlineReverse" => Ok(Attr::UnderlineReverse), - "BoldReverseUnderline" => Ok(Attr::BoldReverseUnderline), - _ => Err(de::Error::custom("invalid attr value")), - } + Attr::from_string_de::<'de, D>(s) } else { Err(de::Error::custom("invalid attr value")) } @@ -1432,6 +1422,25 @@ impl Serialize for Attr { } } +impl Attr { + pub fn from_string_de<'de, D>(s: String) -> std::result::Result + where + D: Deserializer<'de>, + { + match s.as_str() { + "Default" => Ok(Attr::Default), + "Bold" => Ok(Attr::Bold), + "Underline" => Ok(Attr::Underline), + "BoldUnderline" => Ok(Attr::BoldUnderline), + "Reverse" => Ok(Attr::Reverse), + "BoldReverse" => Ok(Attr::BoldReverse), + "UnderlineReverse" => Ok(Attr::UnderlineReverse), + "BoldReverseUnderline" => Ok(Attr::BoldReverseUnderline), + _ => Err(de::Error::custom("invalid attr value")), + } + } +} + pub fn copy_area_with_break( grid_dest: &mut CellBuffer, grid_src: &CellBuffer,