Introduce a new, language-overridable Autosave setting

This commit is contained in:
Antonio Scandurra 2022-07-05 09:25:22 +02:00
parent 8f021d8ca8
commit 4b533c339d
2 changed files with 17 additions and 1 deletions

View file

@ -39,6 +39,7 @@ pub struct LanguageSettings {
pub preferred_line_length: Option<u32>,
pub format_on_save: Option<bool>,
pub enable_language_server: Option<bool>,
pub autosave: Option<Autosave>,
}
#[derive(Copy, Clone, Debug, Deserialize, PartialEq, Eq, JsonSchema)]
@ -49,6 +50,15 @@ pub enum SoftWrap {
PreferredLineLength,
}
#[derive(Copy, Clone, Debug, Deserialize, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum Autosave {
Off,
AfterDelay { milliseconds: usize },
OnFocusChange,
OnWindowChange,
}
#[derive(Clone, Debug, Default, Deserialize, JsonSchema)]
pub struct SettingsFileContent {
#[serde(default)]
@ -128,6 +138,11 @@ impl Settings {
.unwrap_or(true)
}
pub fn autosave(&self, language: Option<&str>) -> Autosave {
self.language_setting(language, |settings| settings.autosave)
.unwrap_or(Autosave::Off)
}
pub fn enable_language_server(&self, language: Option<&str>) -> bool {
self.language_setting(language, |settings| settings.enable_language_server)
.unwrap_or(true)
@ -212,6 +227,7 @@ impl Settings {
&mut self.language_settings.preferred_line_length,
data.editor.preferred_line_length,
);
merge_option(&mut self.language_settings.autosave, data.editor.autosave);
for (language_name, settings) in data.language_overrides.clone().into_iter() {
let target = self
@ -230,6 +246,7 @@ impl Settings {
&mut target.preferred_line_length,
settings.preferred_line_length,
);
merge_option(&mut target.autosave, settings.autosave);
}
}
}

View file

@ -97,7 +97,6 @@ pub fn init(app_state: &Arc<AppState>, cx: &mut gpui::MutableAppContext) {
cx.add_action({
let app_state = app_state.clone();
move |_: &mut Workspace, _: &OpenSettings, cx: &mut ViewContext<Workspace>| {
println!("open settings");
open_config_file(&SETTINGS_PATH, app_state.clone(), cx);
}
});