diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 66169be652..8eedda7c58 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -6769,6 +6769,7 @@ fn build_style( } } else { let font_family_id = settings.buffer_font_family; + let font_features = settings.buffer_font_features; let font_family_name = cx.font_cache().family_name(font_family_id).unwrap(); let font_properties = Default::default(); let font_id = font_cache @@ -6779,6 +6780,7 @@ fn build_style( text: TextStyle { color: settings.theme.editor.text_color, font_family_name, + font_features, font_family_id, font_id, font_size, diff --git a/crates/gpui/src/fonts.rs b/crates/gpui/src/fonts.rs index 86ed46bc46..298bc27d21 100644 --- a/crates/gpui/src/fonts.rs +++ b/crates/gpui/src/fonts.rs @@ -30,6 +30,7 @@ pub struct Features { pub struct TextStyle { pub color: Color, pub font_family_name: Arc, + pub font_features: Features, pub font_family_id: FamilyId, pub font_id: FontId, pub font_size: f32, @@ -124,6 +125,7 @@ impl TextStyle { Ok(Self { color, font_family_name, + font_features, font_family_id, font_id, font_size, @@ -270,6 +272,7 @@ impl Default for TextStyle { Self { color: Default::default(), font_family_name, + font_features: Default::default(), font_family_id, font_id, font_size: 14., @@ -351,6 +354,7 @@ impl ToJson for TextStyle { json!({ "color": self.color.to_json(), "font_family": self.font_family_name.as_ref(), + "font_features": serde_json::to_value(&self.font_features).unwrap(), "font_properties": self.font_properties.to_json(), }) } diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 33977a42e6..630cacf805 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -227,6 +227,7 @@ pub struct TerminalSettings { pub working_directory: Option, pub font_size: Option, pub font_family: Option, + pub font_features: Option, pub env: Option>, pub blinking: Option, pub alternate_scroll: Option, diff --git a/crates/terminal_view/src/terminal_element.rs b/crates/terminal_view/src/terminal_element.rs index fc72016d9b..be210d4905 100644 --- a/crates/terminal_view/src/terminal_element.rs +++ b/crates/terminal_view/src/terminal_element.rs @@ -505,18 +505,21 @@ impl TerminalElement { ///Configures a text style from the current settings. pub fn make_text_style(font_cache: &FontCache, settings: &Settings) -> TextStyle { - // TODO allow font features - // Pull the font family from settings properly overriding - let family_id = settings + let font_family_name = settings .terminal_overrides .font_family .as_ref() .or(settings.terminal_defaults.font_family.as_ref()) - .and_then(|family_name| { - font_cache - .load_family(&[family_name], Default::default()) - .log_err() - }) + .unwrap_or(&settings.buffer_font_family_name); + let font_features = settings + .terminal_overrides + .font_features + .or(settings.terminal_defaults.font_features) + .unwrap_or(settings.buffer_font_features); + + let family_id = font_cache + .load_family(&[font_family_name], font_features) + .log_err() .unwrap_or(settings.buffer_font_family); let font_size = settings @@ -533,6 +536,7 @@ impl TerminalElement { color: settings.theme.editor.text_color, font_family_id: family_id, font_family_name: font_cache.family_name(family_id).unwrap(), + font_features, font_id, font_size, font_properties: Default::default(), diff --git a/crates/theme_testbench/src/theme_testbench.rs b/crates/theme_testbench/src/theme_testbench.rs index ad01f51a15..f21c631767 100644 --- a/crates/theme_testbench/src/theme_testbench.rs +++ b/crates/theme_testbench/src/theme_testbench.rs @@ -243,6 +243,7 @@ impl ThemeTestbench { color: style.foreground, font_family_id: family_id, font_family_name: font_cache.family_name(family_id).unwrap(), + font_features: settings.buffer_font_features, font_id, font_size, font_properties: Default::default(),