use anyhow::Result; use gpui::AppContext; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use settings::{Settings, SettingsSources}; #[derive(Deserialize)] pub struct WorkspaceSettings { pub active_pane_magnification: f32, pub centered_layout: CenteredLayoutSettings, pub confirm_quit: bool, pub show_call_status_icon: bool, pub autosave: AutosaveSetting, pub restore_on_startup: RestoreOnStartupBehaviour, pub drop_target_size: f32, } #[derive(Copy, Clone, Default, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum RestoreOnStartupBehaviour { /// Always start with an empty editor None, /// Restore the workspace that was closed last. #[default] LastWorkspace, } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] pub struct WorkspaceSettingsContent { /// Scale by which to zoom the active pane. /// When set to 1.0, the active pane has the same size as others, /// but when set to a larger value, the active pane takes up more space. /// /// Default: `1.0` pub active_pane_magnification: Option, // Centered layout related settings. pub centered_layout: Option, /// Whether or not to prompt the user to confirm before closing the application. /// /// Default: false pub confirm_quit: Option, /// Whether or not to show the call status icon in the status bar. /// /// Default: true pub show_call_status_icon: Option, /// When to automatically save edited buffers. /// /// Default: off pub autosave: Option, /// Controls previous session restoration in freshly launched Zed instance. /// Values: none, last_workspace /// Default: last_workspace pub restore_on_startup: Option, /// The size of the workspace split drop targets on the outer edges. /// Given as a fraction that will be multiplied by the smaller dimension of the workspace. /// /// Default: `0.2` (20% of the smaller dimension of the workspace) pub drop_target_size: Option, } #[derive(Deserialize)] pub struct TabBarSettings { pub show_nav_history_buttons: bool, } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] pub struct TabBarSettingsContent { /// Whether or not to show the navigation history buttons in the tab bar. /// /// Default: true pub show_nav_history_buttons: Option, } #[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum AutosaveSetting { /// Disable autosave. Off, /// Save after inactivity period of `milliseconds`. AfterDelay { milliseconds: u64 }, /// Autosave when focus changes. OnFocusChange, /// Autosave when the active window changes. OnWindowChange, } #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "snake_case")] pub struct CenteredLayoutSettings { /// The relative width of the left padding of the central pane from the /// workspace when the centered layout is used. /// /// Default: 0.2 pub left_padding: Option, // The relative width of the right padding of the central pane from the // workspace when the centered layout is used. /// /// Default: 0.2 pub right_padding: Option, } impl Settings for WorkspaceSettings { const KEY: Option<&'static str> = None; type FileContent = WorkspaceSettingsContent; fn load(sources: SettingsSources, _: &mut AppContext) -> Result { sources.json_merge() } } impl Settings for TabBarSettings { const KEY: Option<&'static str> = Some("tab_bar"); type FileContent = TabBarSettingsContent; fn load(sources: SettingsSources, _: &mut AppContext) -> Result { sources.json_merge() } }