From 7c2cf86dd952ecc4ed1397566c212b13fc56998d Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 2 Oct 2025 10:08:54 -0600 Subject: [PATCH] Revert "Add ability to hide status bar (#38974)" This reverts commit 126ed6fbddf6370490133404734ed435a885bd06. --- assets/settings/default.json | 2 - crates/editor/src/editor_settings.rs | 18 +++++++ crates/go_to_line/src/cursor_position.rs | 9 ++-- .../src/active_buffer_language.rs | 9 ++-- crates/settings/src/settings_content.rs | 1 - .../settings/src/settings_content/editor.rs | 16 ++++++ .../src/settings_content/workspace.rs | 18 ------- crates/workspace/src/workspace.rs | 52 +------------------ crates/workspace/src/workspace_settings.rs | 27 ---------- docs/src/configuring-zed.md | 8 --- 10 files changed, 48 insertions(+), 112 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index b705a0933d3d84ea4e496c32f7924877522dceda..21cd3b84041b89344516145dbdfe79151199bf65 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -1327,8 +1327,6 @@ }, // Status bar-related settings. "status_bar": { - // Whether to show the status bar. - "experimental.show": true, // Whether to show the active language button in the status bar. "active_language_button": true, // Whether to show the cursor position button in the status bar. diff --git a/crates/editor/src/editor_settings.rs b/crates/editor/src/editor_settings.rs index 5bc359be7343a91137c093145fe17c441c150388..6ad8304f911a54fc0817f963aa593dc6e908637b 100644 --- a/crates/editor/src/editor_settings.rs +++ b/crates/editor/src/editor_settings.rs @@ -25,6 +25,7 @@ pub struct EditorSettings { pub lsp_highlight_debounce: u64, pub hover_popover_enabled: bool, pub hover_popover_delay: u64, + pub status_bar: StatusBar, pub toolbar: Toolbar, pub scrollbar: Scrollbar, pub minimap: Minimap, @@ -66,6 +67,18 @@ pub struct Jupyter { pub enabled: bool, } +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct StatusBar { + /// Whether to display the active language button in the status bar. + /// + /// Default: true + pub active_language_button: bool, + /// Whether to show the cursor position button in the status bar. + /// + /// Default: true + pub cursor_position_button: bool, +} + #[derive(Clone, Debug, PartialEq, Eq)] pub struct Toolbar { pub breadcrumbs: bool, @@ -182,6 +195,7 @@ impl Settings for EditorSettings { let minimap = editor.minimap.unwrap(); let gutter = editor.gutter.unwrap(); let axes = scrollbar.axes.unwrap(); + let status_bar = editor.status_bar.unwrap(); let toolbar = editor.toolbar.unwrap(); let search = editor.search.unwrap(); let drag_and_drop_selection = editor.drag_and_drop_selection.unwrap(); @@ -194,6 +208,10 @@ impl Settings for EditorSettings { lsp_highlight_debounce: editor.lsp_highlight_debounce.unwrap(), hover_popover_enabled: editor.hover_popover_enabled.unwrap(), hover_popover_delay: editor.hover_popover_delay.unwrap(), + status_bar: StatusBar { + active_language_button: status_bar.active_language_button.unwrap(), + cursor_position_button: status_bar.cursor_position_button.unwrap(), + }, toolbar: Toolbar { breadcrumbs: toolbar.breadcrumbs.unwrap(), quick_actions: toolbar.quick_actions.unwrap(), diff --git a/crates/go_to_line/src/cursor_position.rs b/crates/go_to_line/src/cursor_position.rs index b722777262be078858959ae8fbd95528f8e0f986..9387a5359ef3013574876602b4c67a44497c65cc 100644 --- a/crates/go_to_line/src/cursor_position.rs +++ b/crates/go_to_line/src/cursor_position.rs @@ -1,4 +1,4 @@ -use editor::{Editor, MultiBufferSnapshot}; +use editor::{Editor, EditorSettings, MultiBufferSnapshot}; use gpui::{App, Entity, FocusHandle, Focusable, Subscription, Task, WeakEntity}; use settings::Settings; use std::{fmt::Write, num::NonZeroU32, time::Duration}; @@ -8,7 +8,7 @@ use ui::{ Render, Tooltip, Window, div, }; use util::paths::FILE_ROW_COLUMN_DELIMITER; -use workspace::{StatusBarSettings, StatusItemView, Workspace, item::ItemHandle}; +use workspace::{StatusItemView, Workspace, item::ItemHandle}; #[derive(Copy, Clone, Debug, Default, PartialOrd, PartialEq)] pub(crate) struct SelectionStats { @@ -205,7 +205,10 @@ impl CursorPosition { impl Render for CursorPosition { fn render(&mut self, _window: &mut Window, cx: &mut Context) -> impl IntoElement { - if !StatusBarSettings::get_global(cx).cursor_position_button { + if !EditorSettings::get_global(cx) + .status_bar + .cursor_position_button + { return div(); } diff --git a/crates/language_selector/src/active_buffer_language.rs b/crates/language_selector/src/active_buffer_language.rs index 38d010e33bc89012b0dc1a35d1638a6a443f9075..56924c4cd2d54c64436a5ccaa7dabfe4c53ff0ec 100644 --- a/crates/language_selector/src/active_buffer_language.rs +++ b/crates/language_selector/src/active_buffer_language.rs @@ -1,11 +1,11 @@ -use editor::Editor; +use editor::{Editor, EditorSettings}; use gpui::{ Context, Entity, IntoElement, ParentElement, Render, Subscription, WeakEntity, Window, div, }; use language::LanguageName; use settings::Settings as _; use ui::{Button, ButtonCommon, Clickable, FluentBuilder, LabelSize, Tooltip}; -use workspace::{StatusBarSettings, StatusItemView, Workspace, item::ItemHandle}; +use workspace::{StatusItemView, Workspace, item::ItemHandle}; use crate::{LanguageSelector, Toggle}; @@ -40,7 +40,10 @@ impl ActiveBufferLanguage { impl Render for ActiveBufferLanguage { fn render(&mut self, _: &mut Window, cx: &mut Context) -> impl IntoElement { - if !StatusBarSettings::get_global(cx).active_language_button { + if !EditorSettings::get_global(cx) + .status_bar + .active_language_button + { return div(); } diff --git a/crates/settings/src/settings_content.rs b/crates/settings/src/settings_content.rs index e3a728a06b04a06b43e8ffc55327cae571453a7d..be725660e8bffdb50715b784bef8766f7e5e88eb 100644 --- a/crates/settings/src/settings_content.rs +++ b/crates/settings/src/settings_content.rs @@ -58,7 +58,6 @@ pub struct SettingsContent { pub tabs: Option, pub tab_bar: Option, - pub status_bar: Option, pub preview_tabs: Option, diff --git a/crates/settings/src/settings_content/editor.rs b/crates/settings/src/settings_content/editor.rs index 79a034e75ccbfbabf53f4edbe9bd923325c2fb3c..edfbc106538aed42d804f13954271f348ab16485 100644 --- a/crates/settings/src/settings_content/editor.rs +++ b/crates/settings/src/settings_content/editor.rs @@ -54,6 +54,8 @@ pub struct EditorSettingsContent { /// /// Default: 300 pub hover_popover_delay: Option, + /// Status bar related settings + pub status_bar: Option, /// Toolbar related settings pub toolbar: Option, /// Scrollbar related settings @@ -191,6 +193,20 @@ pub struct EditorSettingsContent { pub lsp_document_colors: Option, } +// Status bar related settings +#[skip_serializing_none] +#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq, Eq)] +pub struct StatusBarContent { + /// Whether to display the active language button in the status bar. + /// + /// Default: true + pub active_language_button: Option, + /// Whether to show the cursor position button in the status bar. + /// + /// Default: true + pub cursor_position_button: Option, +} + // Toolbar related settings #[skip_serializing_none] #[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq, Eq)] diff --git a/crates/settings/src/settings_content/workspace.rs b/crates/settings/src/settings_content/workspace.rs index 15435f55ed1040b73b58b4ad2816b034c3acfbce..66b46c4c719ba82aa237cc9034e9c57bb1c4449d 100644 --- a/crates/settings/src/settings_content/workspace.rs +++ b/crates/settings/src/settings_content/workspace.rs @@ -361,24 +361,6 @@ pub struct TabBarSettingsContent { pub show_tab_bar_buttons: Option, } -#[skip_serializing_none] -#[derive(Clone, Default, Serialize, Deserialize, JsonSchema, MergeFrom, Debug, PartialEq, Eq)] -pub struct StatusBarSettingsContent { - /// Whether to show the status bar. - /// - /// Default: true - #[serde(rename = "experimental.show", default)] - pub show: Option, - /// Whether to display the active language button in the status bar. - /// - /// Default: true - pub active_language_button: Option, - /// Whether to show the cursor position button in the status bar. - /// - /// Default: true - pub cursor_position_button: Option, -} - #[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, MergeFrom)] #[serde(rename_all = "snake_case")] pub enum AutosaveSetting { diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index c9139e1eaa2dd792a0cf113eea1d975a2ec4676d..14088d95d7d086c5dde46209a3d4a07cbf7b1f79 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -112,8 +112,7 @@ use util::{ }; use uuid::Uuid; pub use workspace_settings::{ - AutosaveSetting, BottomDockLayout, RestoreOnStartupBehavior, StatusBarSettings, TabBarSettings, - WorkspaceSettings, + AutosaveSetting, BottomDockLayout, RestoreOnStartupBehavior, TabBarSettings, WorkspaceSettings, }; use zed_actions::{Spawn, feedback::FileBugReport}; @@ -507,7 +506,6 @@ pub fn init_settings(cx: &mut App) { ItemSettings::register(cx); PreviewTabsSettings::register(cx); TabBarSettings::register(cx); - StatusBarSettings::register(cx); } fn prompt_and_open_paths(app_state: Arc, options: PathPromptOptions, cx: &mut App) { @@ -1749,10 +1747,6 @@ impl Workspace { &self.status_bar } - pub fn status_bar_visible(&self, cx: &App) -> bool { - StatusBarSettings::get_global(cx).show - } - pub fn app_state(&self) -> &Arc { &self.app_state } @@ -6735,9 +6729,7 @@ impl Render for Workspace { })) .children(self.render_notifications(window, cx)), ) - .when(self.status_bar_visible(cx), |parent| { - parent.child(self.status_bar.clone()) - }) + .child(self.status_bar.clone()) .child(self.modal_layer.clone()) .child(self.toast_layer.clone()), ), @@ -10780,46 +10772,6 @@ mod tests { } } - #[gpui::test] - async fn test_status_bar_visibility(cx: &mut TestAppContext) { - init_test(cx); - - let fs = FakeFs::new(cx.executor()); - let project = Project::test(fs, [], cx).await; - let (workspace, _cx) = - cx.add_window_view(|window, cx| Workspace::test_new(project.clone(), window, cx)); - - // Test with status bar shown (default) - workspace.read_with(cx, |workspace, cx| { - let visible = workspace.status_bar_visible(cx); - assert!(visible, "Status bar should be visible by default"); - }); - - // Test with status bar hidden - cx.update_global(|store: &mut SettingsStore, cx| { - store.update_user_settings(cx, |settings| { - settings.status_bar.get_or_insert_default().show = Some(false); - }); - }); - - workspace.read_with(cx, |workspace, cx| { - let visible = workspace.status_bar_visible(cx); - assert!(!visible, "Status bar should be hidden when show is false"); - }); - - // Test with status bar shown explicitly - cx.update_global(|store: &mut SettingsStore, cx| { - store.update_user_settings(cx, |settings| { - settings.status_bar.get_or_insert_default().show = Some(true); - }); - }); - - workspace.read_with(cx, |workspace, cx| { - let visible = workspace.status_bar_visible(cx); - assert!(visible, "Status bar should be visible when show is true"); - }); - } - fn pane_items_paths(pane: &Entity, cx: &App) -> Vec { pane.read(cx) .items() diff --git a/crates/workspace/src/workspace_settings.rs b/crates/workspace/src/workspace_settings.rs index 963fd6de58c2a722c0592cb911dbabaf87dafa0f..dfef0bd77ded79b4a1c3037f1506f64d4c0fe54c 100644 --- a/crates/workspace/src/workspace_settings.rs +++ b/crates/workspace/src/workspace_settings.rs @@ -222,30 +222,3 @@ impl Settings for TabBarSettings { } } } - -#[derive(Deserialize)] -pub struct StatusBarSettings { - pub show: bool, - pub active_language_button: bool, - pub cursor_position_button: bool, -} - -impl Settings for StatusBarSettings { - fn from_settings(content: &settings::SettingsContent, _cx: &mut App) -> Self { - let status_bar = content.status_bar.clone().unwrap(); - StatusBarSettings { - show: status_bar.show.unwrap(), - active_language_button: status_bar.active_language_button.unwrap(), - cursor_position_button: status_bar.cursor_position_button.unwrap(), - } - } - - fn import_from_vscode( - vscode: &settings::VsCodeSettings, - current: &mut settings::SettingsContent, - ) { - if let Some(show) = vscode.read_bool("workbench.statusBar.visible") { - current.status_bar.get_or_insert_default().show = Some(show); - } - } -} diff --git a/docs/src/configuring-zed.md b/docs/src/configuring-zed.md index 379129c851574d6e44f9f2234ae20e89c29aa498..f0f541384f9a1e15115f2e77034ab8d82cdcca1b 100644 --- a/docs/src/configuring-zed.md +++ b/docs/src/configuring-zed.md @@ -1502,14 +1502,6 @@ Positive `integer` value between 1 and 32. Values outside of this range will be }, ``` -There is an experimental setting that completely hides the status bar. This causes major usability problems (you will be unable to use many of Zed's features), but is provided for those who value screen real-estate above all else. - -```json -"status_bar": { - "experimental.show": false -} -``` - ## LSP - Description: Configuration for language servers.