aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src/theme.rs
diff options
context:
space:
mode:
authortomleb2023-06-19 02:02:34 +0000
committerGitHub2023-06-19 02:02:34 +0000
commit29638babea410d6d8397b02e6a826de0076a69c0 (patch)
tree82c53997dd8139aa80a9325eb13a1e2af6245f28 /helix-view/src/theme.rs
parentd5af6031f6ccd0a3f32efbb210aec24cd9c71ab1 (diff)
Allow ANSI colors in themes (#5119)
Diffstat (limited to 'helix-view/src/theme.rs')
-rw-r--r--helix-view/src/theme.rs23
1 files changed, 19 insertions, 4 deletions
diff --git a/helix-view/src/theme.rs b/helix-view/src/theme.rs
index a8cc5926..bf3379ca 100644
--- a/helix-view/src/theme.rs
+++ b/helix-view/src/theme.rs
@@ -390,8 +390,23 @@ impl ThemePalette {
Self { palette: default }
}
- pub fn hex_string_to_rgb(s: &str) -> Result<Color, String> {
- if s.starts_with('#') && s.len() >= 7 {
+ pub fn string_to_rgb(s: &str) -> Result<Color, String> {
+ if s.starts_with('#') {
+ Self::hex_string_to_rgb(s)
+ } else {
+ Self::ansi_string_to_rgb(s)
+ }
+ }
+
+ fn ansi_string_to_rgb(s: &str) -> Result<Color, String> {
+ if let Ok(index) = s.parse::<u8>() {
+ return Ok(Color::Indexed(index));
+ }
+ Err(format!("Theme: malformed ANSI: {}", s))
+ }
+
+ fn hex_string_to_rgb(s: &str) -> Result<Color, String> {
+ if s.len() >= 7 {
if let (Ok(red), Ok(green), Ok(blue)) = (
u8::from_str_radix(&s[1..3], 16),
u8::from_str_radix(&s[3..5], 16),
@@ -417,7 +432,7 @@ impl ThemePalette {
.get(value)
.copied()
.ok_or("")
- .or_else(|_| Self::hex_string_to_rgb(value))
+ .or_else(|_| Self::string_to_rgb(value))
}
pub fn parse_modifier(value: &Value) -> Result<Modifier, String> {
@@ -493,7 +508,7 @@ impl TryFrom<Value> for ThemePalette {
let mut palette = HashMap::with_capacity(map.len());
for (name, value) in map {
let value = Self::parse_value_as_str(&value)?;
- let color = Self::hex_string_to_rgb(value)?;
+ let color = Self::string_to_rgb(value)?;
palette.insert(name, color);
}