Add setting to hide active language button in the status bar (#33977)

Release Notes:

- Added settings status_bar.show_active_language_button to show/hide the
language button in the status bar.

The motivation for this is visual, I have had zero issues with its
functionality.

The language switcher can still be accessed by the command palette,
menu, or a keyboard shortcut.

------

This is my first Zed and first Rust PR, so criticism is very welcome. 

I know there has been discussion around how the status bar settings are
structured and named, and I am happy to change it to whatever is best. I
was also not sure what order to put it in in the settings default.json.
Feedback welcome.

Here is a picture of it in action:


![image](https://github.com/user-attachments/assets/c50131e2-71aa-4fab-8db0-8b2aae586e71)

---------

Co-authored-by: zumbalogy <3770982+zumbalogy@users.noreply.github.com>
Co-authored-by: Kirill Bulatov <kirill@zed.dev>
This commit is contained in:
zumbalogy 2025-08-07 22:04:30 -07:00 committed by GitHub
parent 0169bddb59
commit 2c7251e4f9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 57 additions and 1 deletions

View file

@ -1238,6 +1238,11 @@
// 2. hour24
"hour_format": "hour12"
},
// Status bar-related settings.
"status_bar": {
// Whether to show the active language button in the status bar.
"active_language_button": true
},
// Settings specific to the terminal
"terminal": {
// What shell to use when opening a terminal. May take 3 values:

View file

@ -20,6 +20,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,
@ -125,6 +126,14 @@ pub struct JupyterContent {
pub enabled: Option<bool>,
}
#[derive(Copy, Clone, Default, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
pub struct StatusBar {
/// Whether to display the active language button in the status bar.
///
/// Default: true
pub active_language_button: bool,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
pub struct Toolbar {
pub breadcrumbs: bool,
@ -440,6 +449,8 @@ pub struct EditorSettingsContent {
///
/// Default: 300
pub hover_popover_delay: Option<u64>,
/// Status bar related settings
pub status_bar: Option<StatusBarContent>,
/// Toolbar related settings
pub toolbar: Option<ToolbarContent>,
/// Scrollbar related settings
@ -567,6 +578,15 @@ pub struct EditorSettingsContent {
pub lsp_document_colors: Option<DocumentColorsRenderMode>,
}
// Status bar related settings
#[derive(Clone, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
pub struct StatusBarContent {
/// Whether to display the active language button in the status bar.
///
/// Default: true
pub active_language_button: Option<bool>,
}
// Toolbar related settings
#[derive(Clone, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
pub struct ToolbarContent {

View file

@ -1,8 +1,9 @@
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::{StatusItemView, Workspace, item::ItemHandle};
@ -39,6 +40,13 @@ impl ActiveBufferLanguage {
impl Render for ActiveBufferLanguage {
fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
if !EditorSettings::get_global(cx)
.status_bar
.active_language_button
{
return div();
}
div().when_some(self.active_language.as_ref(), |el, active_language| {
let active_language_text = if let Some(active_language_text) = active_language {
active_language_text.to_string()

View file

@ -1275,6 +1275,18 @@ Each option controls displaying of a particular toolbar element. If all elements
`boolean` values
## Status Bar
- Description: Control various elements in the status bar. Note that some items in the status bar have their own settings set elsewhere.
- Setting: `status_bar`
- Default:
```json
"status_bar": {
"active_language_button": true,
},
```
## LSP
- Description: Configuration for language servers.

View file

@ -306,6 +306,17 @@ TBD: Centered layout related settings
}
```
### Status Bar
```json
"status_bar": {
// Show/hide a button that displays the active buffer's language.
// Clicking the button brings up the language selector.
// Defaults to true.
"active_language_button": true,
},
```
### Multibuffer
```json