aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjliaoh2022-12-30 14:15:30 +0000
committerGitHub2022-12-30 14:15:30 +0000
commit63dcaae1b9083396fb3faaef9eaa2421f7e48fb9 (patch)
tree217eaaa1baf56f70a0c2083ac401cabc716d444c
parentb813b1a659e39fbe4c1a757ec837a132c6fadbf9 (diff)
Fix theme inheritance for default themes (#5218)
-rw-r--r--helix-view/src/theme.rs31
1 files changed, 22 insertions, 9 deletions
diff --git a/helix-view/src/theme.rs b/helix-view/src/theme.rs
index b2c8a79f..cb0d3ac4 100644
--- a/helix-view/src/theme.rs
+++ b/helix-view/src/theme.rs
@@ -14,15 +14,23 @@ use toml::{map::Map, Value};
use crate::graphics::UnderlineStyle;
pub use crate::graphics::{Color, Modifier, Style};
+pub static DEFAULT_THEME_DATA: Lazy<Value> = Lazy::new(|| {
+ toml::from_slice(include_bytes!("../../theme.toml")).expect("Failed to parse default theme")
+});
+
+pub static BASE16_DEFAULT_THEME_DATA: Lazy<Value> = Lazy::new(|| {
+ toml::from_slice(include_bytes!("../../base16_theme.toml"))
+ .expect("Failed to parse base 16 default theme")
+});
+
pub static DEFAULT_THEME: Lazy<Theme> = Lazy::new(|| Theme {
name: "default".into(),
- ..toml::from_slice(include_bytes!("../../theme.toml")).expect("Failed to parse default theme")
+ ..Theme::from(DEFAULT_THEME_DATA.clone())
});
pub static BASE16_DEFAULT_THEME: Lazy<Theme> = Lazy::new(|| Theme {
- name: "base16_theme".into(),
- ..toml::from_slice(include_bytes!("../../base16_theme.toml"))
- .expect("Failed to parse base 16 default theme")
+ name: "base16_default".into(),
+ ..Theme::from(BASE16_DEFAULT_THEME_DATA.clone())
});
#[derive(Clone, Debug)]
@@ -78,11 +86,16 @@ impl Loader {
)
})?;
- let parent_theme_toml = self.load_theme(
- parent_theme_name,
- base_them_name,
- base_them_name == parent_theme_name,
- )?;
+ let parent_theme_toml = match parent_theme_name {
+ // load default themes's toml from const.
+ "default" => DEFAULT_THEME_DATA.clone(),
+ "base16_default" => BASE16_DEFAULT_THEME_DATA.clone(),
+ _ => self.load_theme(
+ parent_theme_name,
+ base_them_name,
+ base_them_name == parent_theme_name,
+ )?,
+ };
self.merge_themes(parent_theme_toml, theme_toml)
} else {