
This PR is another step to tabless editing (#6424, #4963). It adds support for tab bar settings that allow the user to change its placement or to hide completely. Configuraton: ```json "tab_bar": { "show": true } ``` Placemnet options are "top", "bottom" and "no". This PR intentionally doesn't affect tab bars of other panes (Terminal for instance) to keep code changes small. I guess we'll do the rest in separate PRs. Release Notes: - Added support for configuring the editor tab bar (part of #6424, #4963). --------- Co-authored-by: Mikayla <mikayla@zed.dev>
125 lines
4 KiB
Rust
125 lines
4 KiB
Rust
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<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
|
|
/// Default: last_workspace
|
|
pub restore_on_startup: Option<RestoreOnStartupBehaviour>,
|
|
/// 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>,
|
|
}
|
|
|
|
#[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: top
|
|
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()
|
|
}
|
|
}
|