From 63dcaae1b9083396fb3faaef9eaa2421f7e48fb9 Mon Sep 17 00:00:00 2001 From: jliaoh <48660001+hunterliao29@users.noreply.github.com> Date: Fri, 30 Dec 2022 09:15:30 -0500 Subject: [PATCH] Fix theme inheritance for default themes (#5218) --- helix-view/src/theme.rs | 31 ++++++++++++++++++++++--------- 1 file 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 = Lazy::new(|| { + toml::from_slice(include_bytes!("../../theme.toml")).expect("Failed to parse default theme") +}); + +pub static BASE16_DEFAULT_THEME_DATA: Lazy = Lazy::new(|| { + toml::from_slice(include_bytes!("../../base16_theme.toml")) + .expect("Failed to parse base 16 default theme") +}); + pub static DEFAULT_THEME: Lazy = 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 = 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 {