diff --git a/crates/onboarding/src/base_keymap_picker.rs b/crates/onboarding/src/base_keymap_picker.rs index 0ac07d9a9d..79a716cc9e 100644 --- a/crates/onboarding/src/base_keymap_picker.rs +++ b/crates/onboarding/src/base_keymap_picker.rs @@ -187,7 +187,7 @@ impl PickerDelegate for BaseKeymapSelectorDelegate { ); update_settings_file::(self.fs.clone(), cx, move |setting, _| { - *setting = Some(base_keymap) + setting.base_keymap = Some(base_keymap) }); } diff --git a/crates/onboarding/src/basics_page.rs b/crates/onboarding/src/basics_page.rs index 441d2ca4b7..991386cb38 100644 --- a/crates/onboarding/src/basics_page.rs +++ b/crates/onboarding/src/basics_page.rs @@ -325,7 +325,7 @@ fn render_base_keymap_section(tab_index: &mut isize, cx: &mut App) -> impl IntoE let fs = ::global(cx); update_settings_file::(fs, cx, move |setting, _| { - *setting = Some(keymap_base); + setting.base_keymap = Some(keymap_base); }); } } diff --git a/crates/settings/src/base_keymap_setting.rs b/crates/settings/src/base_keymap_setting.rs index 087f25185a..fb5b445b49 100644 --- a/crates/settings/src/base_keymap_setting.rs +++ b/crates/settings/src/base_keymap_setting.rs @@ -100,25 +100,36 @@ impl BaseKeymap { } } -impl Settings for BaseKeymap { - const KEY: Option<&'static str> = Some("base_keymap"); +#[derive( + Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default, SettingsUi, +)] +// extracted so that it can be an option, and still work with derive(SettingsUi) +pub struct BaseKeymapSetting { + pub base_keymap: Option, +} - type FileContent = Option; +impl Settings for BaseKeymap { + const KEY: Option<&'static str> = None; + + type FileContent = BaseKeymapSetting; fn load( sources: SettingsSources, _: &mut gpui::App, ) -> anyhow::Result { - if let Some(Some(user_value)) = sources.user.copied() { + if let Some(Some(user_value)) = sources.user.map(|setting| setting.base_keymap) { return Ok(user_value); } - if let Some(Some(server_value)) = sources.server.copied() { + if let Some(Some(server_value)) = sources.server.map(|setting| setting.base_keymap) { return Ok(server_value); } - sources.default.ok_or_else(Self::missing_default) + sources + .default + .base_keymap + .ok_or_else(Self::missing_default) } fn import_from_vscode(_vscode: &VsCodeSettings, current: &mut Self::FileContent) { - *current = Some(BaseKeymap::VSCode); + current.base_keymap = Some(BaseKeymap::VSCode); } }