Add font name completions to ui_font_family and terminal::font_family

This commit is contained in:
Piotr Osiewicz 2024-01-16 20:19:58 +01:00
parent f011953484
commit ff67d9dea0
4 changed files with 46 additions and 1 deletions

1
Cargo.lock generated
View file

@ -7775,6 +7775,7 @@ dependencies = [
"schemars", "schemars",
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json",
"settings", "settings",
"shellexpand", "shellexpand",
"smallvec", "smallvec",

View file

@ -33,6 +33,7 @@ thiserror.workspace = true
lazy_static.workspace = true lazy_static.workspace = true
serde.workspace = true serde.workspace = true
serde_derive.workspace = true serde_derive.workspace = true
serde_json.workspace = true
[dev-dependencies] [dev-dependencies]
rand.workspace = true rand.workspace = true

View file

@ -1,6 +1,12 @@
use gpui::{px, AbsoluteLength, AppContext, FontFeatures, Pixels}; use gpui::{px, AbsoluteLength, AppContext, FontFeatures, Pixels};
use schemars::JsonSchema; use schemars::{
gen::SchemaGenerator,
schema::{InstanceType, RootSchema, Schema, SchemaObject},
JsonSchema,
};
use serde_derive::{Deserialize, Serialize}; use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
use settings::SettingsJsonSchemaParams;
use std::{collections::HashMap, path::PathBuf}; use std::{collections::HashMap, path::PathBuf};
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
@ -153,6 +159,39 @@ impl settings::Settings for TerminalSettings {
) -> anyhow::Result<Self> { ) -> anyhow::Result<Self> {
Self::load_via_json_merge(default_value, user_values) Self::load_via_json_merge(default_value, user_values)
} }
fn json_schema(
generator: &mut SchemaGenerator,
_: &SettingsJsonSchemaParams,
cx: &AppContext,
) -> RootSchema {
let mut root_schema = generator.root_schema_for::<Self::FileContent>();
let available_fonts = cx
.text_system()
.all_font_names()
.into_iter()
.map(Value::String)
.collect();
let fonts_schema = SchemaObject {
instance_type: Some(InstanceType::String.into()),
enum_values: Some(available_fonts),
..Default::default()
};
root_schema
.definitions
.extend([("FontFamilies".into(), fonts_schema.into())]);
root_schema
.schema
.object
.as_mut()
.unwrap()
.properties
.extend([(
"font_family".to_owned(),
Schema::new_ref("#/definitions/FontFamilies".into()),
)]);
root_schema
}
} }
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, Default)] #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, Default)]

View file

@ -234,6 +234,10 @@ impl settings::Settings for ThemeSettings {
"buffer_font_family".to_owned(), "buffer_font_family".to_owned(),
Schema::new_ref("#/definitions/FontFamilies".into()), Schema::new_ref("#/definitions/FontFamilies".into()),
), ),
(
"ui_font_family".to_owned(),
Schema::new_ref("#/definitions/FontFamilies".into()),
),
]); ]);
root_schema root_schema