feat: Make the encoding indicator appear only when an editor is open.

feat: Enable the user to choose whether or not the encoding indicator should be displayed by enabling or disabling `encoding_indicator` in `settings.json`
This commit is contained in:
R Aadarsh 2025-08-26 23:54:57 +05:30
parent a3f5e91f0f
commit 3b20229fa1
6 changed files with 34 additions and 9 deletions

1
Cargo.lock generated
View file

@ -5282,6 +5282,7 @@ dependencies = [
"gpui", "gpui",
"language", "language",
"picker", "picker",
"settings",
"ui", "ui",
"util", "util",
"workspace", "workspace",

View file

@ -1258,7 +1258,9 @@
// Whether to show the active language button in the status bar. // Whether to show the active language button in the status bar.
"active_language_button": true, "active_language_button": true,
// Whether to show the cursor position button in the status bar. // Whether to show the cursor position button in the status bar.
"cursor_position_button": true "cursor_position_button": true,
// Whether to show the encoding indicator in the status bar.
"encoding_indicator": true
}, },
// Settings specific to the terminal // Settings specific to the terminal
"terminal": { "terminal": {

View file

@ -136,6 +136,11 @@ pub struct StatusBar {
/// ///
/// Default: true /// Default: true
pub cursor_position_button: bool, pub cursor_position_button: bool,
/// Whether to show the encoding indicator in the status bar.
///
/// Default: true
pub encoding_indicator: bool,
} }
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
@ -593,6 +598,10 @@ pub struct StatusBarContent {
/// ///
/// Default: true /// Default: true
pub cursor_position_button: Option<bool>, pub cursor_position_button: Option<bool>,
/// Whether to show the encoding indicator in the status bar.
///
/// Default: true
pub encoding_indicator: Option<bool>,
} }
// Toolbar related settings // Toolbar related settings

View file

@ -6,15 +6,16 @@ edition.workspace = true
[dependencies] [dependencies]
anyhow.workspace = true anyhow.workspace = true
ui.workspace = true
workspace.workspace = true
gpui.workspace = true
picker.workspace = true
util.workspace = true
fuzzy.workspace = true
editor.workspace = true editor.workspace = true
encoding.workspace = true encoding.workspace = true
fuzzy.workspace = true
gpui.workspace = true
language.workspace = true language.workspace = true
picker.workspace = true
settings.workspace = true
ui.workspace = true
util.workspace = true
workspace.workspace = true
[lints] [lints]
workspace = true workspace = true

View file

@ -1,5 +1,5 @@
///! A crate for handling file encodings in the text editor. ///! A crate for handling file encodings in the text editor.
use editor::Editor; use editor::{Editor, EditorSettings};
use encoding::Encoding; use encoding::Encoding;
use encoding::all::{ use encoding::all::{
BIG5_2003, EUC_JP, GB18030, GBK, HZ, IBM866, ISO_2022_JP, ISO_8859_1, ISO_8859_2, ISO_8859_3, BIG5_2003, EUC_JP, GB18030, GBK, HZ, IBM866, ISO_2022_JP, ISO_8859_1, ISO_8859_2, ISO_8859_3,
@ -9,6 +9,7 @@ use encoding::all::{
WINDOWS_1253, WINDOWS_1254, WINDOWS_1255, WINDOWS_1256, WINDOWS_1257, WINDOWS_1258, WINDOWS_1253, WINDOWS_1254, WINDOWS_1255, WINDOWS_1256, WINDOWS_1257, WINDOWS_1258,
}; };
use gpui::{ClickEvent, Entity, Subscription, WeakEntity}; use gpui::{ClickEvent, Entity, Subscription, WeakEntity};
use settings::Settings;
use ui::{Button, ButtonCommon, Context, LabelSize, Render, Tooltip, Window, div}; use ui::{Button, ButtonCommon, Context, LabelSize, Render, Tooltip, Window, div};
use ui::{Clickable, ParentElement}; use ui::{Clickable, ParentElement};
use workspace::{ItemHandle, StatusItemView, Workspace}; use workspace::{ItemHandle, StatusItemView, Workspace};
@ -20,6 +21,7 @@ pub struct EncodingIndicator {
pub encoding: Option<&'static dyn Encoding>, pub encoding: Option<&'static dyn Encoding>,
pub workspace: WeakEntity<Workspace>, pub workspace: WeakEntity<Workspace>,
observe: Option<Subscription>, // Subscription to observe changes in the active editor observe: Option<Subscription>, // Subscription to observe changes in the active editor
show: bool,
} }
pub mod selectors; pub mod selectors;
@ -28,6 +30,12 @@ impl Render for EncodingIndicator {
fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl ui::IntoElement { fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl ui::IntoElement {
let status_element = div(); let status_element = div();
if (EditorSettings::get_global(cx).status_bar.encoding_indicator == false)
|| (self.show == false)
{
return status_element;
}
status_element.child( status_element.child(
Button::new("encoding", encoding_name(self.encoding.unwrap_or(UTF_8))) Button::new("encoding", encoding_name(self.encoding.unwrap_or(UTF_8)))
.label_size(LabelSize::Small) .label_size(LabelSize::Small)
@ -54,6 +62,7 @@ impl EncodingIndicator {
encoding, encoding,
workspace, workspace,
observe, observe,
show: true,
} }
} }
@ -84,10 +93,12 @@ impl StatusItemView for EncodingIndicator {
Some(editor) => { Some(editor) => {
self.observe = Some(cx.observe_in(&editor, window, Self::update)); self.observe = Some(cx.observe_in(&editor, window, Self::update));
self.update(editor, window, cx); self.update(editor, window, cx);
self.show = true;
} }
None => { None => {
self.encoding = None; self.encoding = None;
self.observe = None; self.observe = None;
self.show = false;
} }
} }
} }

View file

@ -1278,7 +1278,8 @@ Each option controls displaying of a particular toolbar element. If all elements
```json ```json
"status_bar": { "status_bar": {
"active_language_button": true, "active_language_button": true,
"cursor_position_button": true "cursor_position_button": true,
"encoding_indicator": true,
}, },
``` ```