diff --git a/zed/assets/themes/light.toml b/zed/assets/themes/light.toml index 77757ac260..ba7ec9915a 100644 --- a/zed/assets/themes/light.toml +++ b/zed/assets/themes/light.toml @@ -1,21 +1,21 @@ extends = "_base" [variables] -elevation_1 = 0xffffff -elevation_2 = 0xf3f3f3 -elevation_3 = 0xececec -elevation_4 = 0x3a3b3c -text_dull = 0xacacac -text_bright = 0x111111 -text_normal = 0x333333 +elevation_1 = "#ffffff" +elevation_2 = "#f3f3f3" +elevation_3 = "#ececec" +elevation_4 = "#3a3b3c" +text_dull = "#acacac" +text_bright = "#111111" +text_normal = "#333333" [syntax] -keyword = 0x0000fa -function = 0x795e26 -string = 0xa82121 -type = 0x267f29 -number = 0xb5cea8 -comment = 0x6a9955 -property = 0x4e94ce -variant = 0x4fc1ff -constant = 0x9cdcfe +keyword = "#0000fa" +function = "#795e26" +string = "#a82121" +type = "#267f29" +number = "#b5cea8" +comment = "#6a9955" +property = "#4e94ce" +variant = "#4fc1ff" +constant = "#9cdcfe" diff --git a/zed/src/settings.rs b/zed/src/settings.rs index 81ae3c9e2a..65dc04190d 100644 --- a/zed/src/settings.rs +++ b/zed/src/settings.rs @@ -1,4 +1,4 @@ -use crate::theme; +use crate::theme::{self, DEFAULT_THEME_NAME}; use anyhow::Result; use gpui::font_cache::{FamilyId, FontCache}; use postage::watch; @@ -48,7 +48,7 @@ pub fn channel_with_themes( font_cache: &FontCache, themes: &ThemeRegistry, ) -> Result<(watch::Sender, watch::Receiver)> { - let theme = match themes.get("dark") { + let theme = match themes.get(DEFAULT_THEME_NAME) { Ok(theme) => dbg!(theme), Err(err) => { panic!("failed to deserialize default theme: {:?}", err) diff --git a/zed/src/theme.rs b/zed/src/theme.rs index 7334ef7862..f5c01b2759 100644 --- a/zed/src/theme.rs +++ b/zed/src/theme.rs @@ -12,6 +12,7 @@ use serde_json as json; use std::{cmp::Ordering, collections::HashMap, sync::Arc}; const DEFAULT_HIGHLIGHT_ID: HighlightId = HighlightId(u32::MAX); +pub const DEFAULT_THEME_NAME: &'static str = "dark"; pub struct ThemeRegistry { assets: Box, @@ -27,6 +28,8 @@ pub struct HighlightId(u32); #[derive(Debug, Default, Deserialize)] pub struct Theme { + #[serde(default)] + pub name: String, pub ui: Ui, pub editor: Editor, #[serde(deserialize_with = "deserialize_syntax_theme")] @@ -129,9 +132,9 @@ impl ThemeRegistry { } let theme_data = self.load(name)?; - let theme = Arc::new(serde_json::from_value::( - theme_data.as_ref().clone(), - )?); + let mut theme = serde_json::from_value::(theme_data.as_ref().clone())?; + theme.name = name.into(); + let theme = Arc::new(theme); self.themes.lock().insert(name.to_string(), theme.clone()); Ok(theme) } @@ -455,8 +458,24 @@ where #[cfg(test)] mod tests { + use crate::assets::Assets; + use super::*; + #[test] + fn test_bundled_themes() { + let registry = ThemeRegistry::new(Assets); + let mut has_default_theme = false; + for theme_name in registry.list() { + let theme = registry.get(&theme_name).unwrap(); + if theme.name == DEFAULT_THEME_NAME { + has_default_theme = true; + } + assert_eq!(theme.name, theme_name); + } + assert!(has_default_theme); + } + #[test] fn test_theme_extension() { let assets = TestAssets(&[ @@ -546,6 +565,7 @@ mod tests { #[test] fn test_highlight_map() { let theme = Theme { + name: "test".into(), ui: Default::default(), editor: Default::default(), syntax: [