
Release Notes: - git: Add a `git_panel.sort_by_path` setting to mix untracked/tracked files in the diff list. - git: Remove the "•" placeholder for "Tracked". The commit button says "Commit Tracked" still by default, and this was misinterpreted to mean "partially staged". Hovering over the button will show you which files are tracked (in addition to the yellow square-with-a-dot-in-it). - Increase the default value of `expand_excerpt_lines` from 3 to 5. This makes it faster to see more context in the git diff view. --------- Co-authored-by: Birk Skyum <birk.skyum@pm.me> Co-authored-by: Peter Tripp <peter@zed.dev>
102 lines
2.9 KiB
Rust
102 lines
2.9 KiB
Rust
use editor::ShowScrollbar;
|
|
use gpui::Pixels;
|
|
use schemars::JsonSchema;
|
|
use serde_derive::{Deserialize, Serialize};
|
|
use settings::{Settings, SettingsSources};
|
|
use workspace::dock::DockPosition;
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
pub struct ScrollbarSettingsContent {
|
|
/// When to show the scrollbar in the git panel.
|
|
///
|
|
/// Default: inherits editor scrollbar settings
|
|
pub show: Option<Option<ShowScrollbar>>,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
pub struct ScrollbarSettings {
|
|
pub show: Option<ShowScrollbar>,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
#[serde(rename_all = "snake_case")]
|
|
// Style of the git status indicator in the panel.
|
|
//
|
|
// Default: icon
|
|
pub enum StatusStyleContent {
|
|
Icon,
|
|
LabelColor,
|
|
}
|
|
|
|
#[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum StatusStyle {
|
|
#[default]
|
|
Icon,
|
|
LabelColor,
|
|
}
|
|
|
|
#[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)]
|
|
pub struct GitPanelSettingsContent {
|
|
/// Whether to show the panel button in the status bar.
|
|
///
|
|
/// Default: true
|
|
pub button: Option<bool>,
|
|
/// Where to dock the panel.
|
|
///
|
|
/// Default: left
|
|
pub dock: Option<DockPosition>,
|
|
/// Default width of the panel in pixels.
|
|
///
|
|
/// Default: 360
|
|
pub default_width: Option<f32>,
|
|
/// How entry statuses are displayed.
|
|
///
|
|
/// Default: icon
|
|
pub status_style: Option<StatusStyle>,
|
|
/// How and when the scrollbar should be displayed.
|
|
///
|
|
/// Default: inherits editor scrollbar settings
|
|
pub scrollbar: Option<ScrollbarSettings>,
|
|
|
|
/// What the default branch name should be when
|
|
/// `init.defaultBranch` is not set in git
|
|
///
|
|
/// Default: main
|
|
pub fallback_branch_name: Option<String>,
|
|
|
|
/// Whether to sort entries in the panel by path
|
|
/// or by status (the default).
|
|
///
|
|
/// Default: false
|
|
pub sort_by_path: Option<bool>,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug, Clone, PartialEq)]
|
|
pub struct GitPanelSettings {
|
|
pub button: bool,
|
|
pub dock: DockPosition,
|
|
pub default_width: Pixels,
|
|
pub status_style: StatusStyle,
|
|
pub scrollbar: ScrollbarSettings,
|
|
pub fallback_branch_name: String,
|
|
pub sort_by_path: bool,
|
|
}
|
|
|
|
impl Settings for GitPanelSettings {
|
|
const KEY: Option<&'static str> = Some("git_panel");
|
|
|
|
type FileContent = GitPanelSettingsContent;
|
|
|
|
fn load(
|
|
sources: SettingsSources<Self::FileContent>,
|
|
_: &mut gpui::App,
|
|
) -> anyhow::Result<Self> {
|
|
sources.json_merge()
|
|
}
|
|
|
|
fn import_from_vscode(vscode: &settings::VsCodeSettings, current: &mut Self::FileContent) {
|
|
vscode.bool_setting("git.enabled", &mut current.button);
|
|
vscode.string_setting("git.defaultBranchName", &mut current.fallback_branch_name);
|
|
}
|
|
}
|