
This PR fixes some instances that weren't using US English spellings of "behavior" and "customize". Release Notes: - N/A
167 lines
5.6 KiB
Rust
167 lines
5.6 KiB
Rust
use anyhow::Result;
|
|
use collections::HashMap;
|
|
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: RestoreOnStartupBehavior,
|
|
pub drop_target_size: f32,
|
|
pub when_closing_with_no_tabs: CloseWindowWhenNoItems,
|
|
pub use_system_path_prompts: bool,
|
|
pub command_aliases: HashMap<String, String>,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Default, Serialize, Deserialize, JsonSchema)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum CloseWindowWhenNoItems {
|
|
/// Match platform conventions by default, so "on" on macOS and "off" everywhere else
|
|
#[default]
|
|
PlatformDefault,
|
|
/// Close the window when there are no tabs
|
|
CloseWindow,
|
|
/// Leave the window open when there are no tabs
|
|
KeepWindowOpen,
|
|
}
|
|
|
|
impl CloseWindowWhenNoItems {
|
|
pub fn should_close(&self) -> bool {
|
|
match self {
|
|
CloseWindowWhenNoItems::PlatformDefault => cfg!(target_os = "macos"),
|
|
CloseWindowWhenNoItems::CloseWindow => true,
|
|
CloseWindowWhenNoItems::KeepWindowOpen => false,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Copy, Clone, Default, Serialize, Deserialize, JsonSchema)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum RestoreOnStartupBehavior {
|
|
/// Always start with an empty editor
|
|
None,
|
|
/// Restore the workspace that was closed last.
|
|
LastWorkspace,
|
|
/// Restore all workspaces that were open when quitting Zed.
|
|
#[default]
|
|
LastSession,
|
|
}
|
|
|
|
#[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<f32>,
|
|
// Centered layout related settings.
|
|
pub centered_layout: Option<CenteredLayoutSettings>,
|
|
/// Whether or not to prompt the user to confirm before closing the application.
|
|
///
|
|
/// Default: false
|
|
pub confirm_quit: Option<bool>,
|
|
/// Whether or not to show the call status icon in the status bar.
|
|
///
|
|
/// Default: true
|
|
pub show_call_status_icon: Option<bool>,
|
|
/// When to automatically save edited buffers.
|
|
///
|
|
/// Default: off
|
|
pub autosave: Option<AutosaveSetting>,
|
|
/// Controls previous session restoration in freshly launched Zed instance.
|
|
/// Values: none, last_workspace, last_session
|
|
/// Default: last_session
|
|
pub restore_on_startup: Option<RestoreOnStartupBehavior>,
|
|
/// 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<f32>,
|
|
/// Whether to close the window when using 'close active item' on a workspace with no tabs
|
|
///
|
|
/// Default: auto ("on" on macOS, "off" otherwise)
|
|
pub when_closing_with_no_tabs: Option<CloseWindowWhenNoItems>,
|
|
/// Whether to use the system provided dialogs for Open and Save As.
|
|
/// When set to false, Zed will use the built-in keyboard-first pickers.
|
|
///
|
|
/// Default: true
|
|
pub use_system_path_prompts: Option<bool>,
|
|
/// Aliases for the command palette. When you type a key in this map,
|
|
/// it will be assumed to equal the value.
|
|
///
|
|
/// Default: true
|
|
pub command_aliases: Option<HashMap<String, String>>,
|
|
}
|
|
|
|
#[derive(Deserialize)]
|
|
pub struct TabBarSettings {
|
|
pub show: bool,
|
|
pub show_nav_history_buttons: bool,
|
|
}
|
|
|
|
#[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]
|
|
pub struct TabBarSettingsContent {
|
|
/// Whether or not to show the tab bar in the editor.
|
|
///
|
|
/// Default: true
|
|
pub show: Option<bool>,
|
|
/// Whether or not to show the navigation history buttons in the tab bar.
|
|
///
|
|
/// Default: true
|
|
pub show_nav_history_buttons: Option<bool>,
|
|
}
|
|
|
|
#[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<f32>,
|
|
// 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<f32>,
|
|
}
|
|
|
|
impl Settings for WorkspaceSettings {
|
|
const KEY: Option<&'static str> = None;
|
|
|
|
type FileContent = WorkspaceSettingsContent;
|
|
|
|
fn load(sources: SettingsSources<Self::FileContent>, _: &mut AppContext) -> Result<Self> {
|
|
sources.json_merge()
|
|
}
|
|
}
|
|
|
|
impl Settings for TabBarSettings {
|
|
const KEY: Option<&'static str> = Some("tab_bar");
|
|
|
|
type FileContent = TabBarSettingsContent;
|
|
|
|
fn load(sources: SettingsSources<Self::FileContent>, _: &mut AppContext) -> Result<Self> {
|
|
sources.json_merge()
|
|
}
|
|
}
|