diff --git a/assets/settings/default.json b/assets/settings/default.json index d07efe7ab947e7..29d07eea0fac27 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -472,6 +472,10 @@ // Can also be 'csh', 'fish', and `nushell` "activate_script": "default" } + }, + "toolbar": { + // Whether to display the terminal title in its toolbar. + "title": true } // Set the terminal's font size. If this option is not included, // the terminal will default to matching the buffer's font size. diff --git a/crates/terminal/src/terminal_settings.rs b/crates/terminal/src/terminal_settings.rs index 2d3a692a9dc30e..59b39751d14afb 100644 --- a/crates/terminal/src/terminal_settings.rs +++ b/crates/terminal/src/terminal_settings.rs @@ -18,6 +18,11 @@ pub enum TerminalDockPosition { Right, } +#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +pub struct Toolbar { + pub title: bool, +} + #[derive(Deserialize)] pub struct TerminalSettings { pub shell: Shell, @@ -36,6 +41,7 @@ pub struct TerminalSettings { pub default_height: Pixels, pub detect_venv: VenvSettings, pub max_scroll_history_lines: Option, + pub toolbar: Toolbar, } #[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema)] @@ -155,6 +161,8 @@ pub struct TerminalSettingsContent { /// /// Default: 10_000 pub max_scroll_history_lines: Option, + /// Toolbar related settings + pub toolbar: Option, } impl settings::Settings for TerminalSettings { @@ -274,3 +282,12 @@ pub enum WorkingDirectory { /// this platform's home directory (if it can be found). Always { directory: String }, } + +// Toolbar related settings +#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +pub struct ToolbarContent { + /// Whether to display the terminal title in its toolbar. + /// + /// Default: true + pub title: Option, +} diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index 3b7ad952b749b2..e756dd454bba5f 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -13,6 +13,7 @@ use gpui::{ use language::Bias; use persistence::TERMINAL_DB; use project::{search::SearchQuery, Fs, LocalWorktree, Metadata, Project}; +use settings::SettingsStore; use terminal::{ alacritty_terminal::{ index::Point, @@ -90,6 +91,7 @@ pub struct TerminalView { blink_epoch: usize, can_navigate_to_selected_word: bool, workspace_id: WorkspaceId, + show_title: bool, _subscriptions: Vec, _terminal_subscriptions: Vec, } @@ -165,7 +167,12 @@ impl TerminalView { blink_epoch: 0, can_navigate_to_selected_word: false, workspace_id, - _subscriptions: vec![focus_in, focus_out], + show_title: TerminalSettings::get_global(cx).toolbar.title, + _subscriptions: vec![ + focus_in, + focus_out, + cx.observe_global::(Self::settings_changed), + ], _terminal_subscriptions: terminal_subscriptions, } } @@ -208,6 +215,12 @@ impl TerminalView { self.context_menu = Some((context_menu, position, subscription)); } + fn settings_changed(&mut self, cx: &mut ViewContext) { + let settings = TerminalSettings::get_global(cx); + self.show_title = settings.toolbar.title; + cx.notify(); + } + fn show_character_palette(&mut self, _: &ShowCharacterPalette, cx: &mut ViewContext) { if !self .terminal @@ -832,7 +845,11 @@ impl Item for TerminalView { } fn breadcrumb_location(&self) -> ToolbarItemLocation { - ToolbarItemLocation::PrimaryLeft + if self.show_title { + ToolbarItemLocation::PrimaryLeft + } else { + ToolbarItemLocation::Hidden + } } fn breadcrumbs(&self, _: &theme::Theme, cx: &AppContext) -> Option> { diff --git a/docs/src/configuring_zed.md b/docs/src/configuring_zed.md index c4a6a6d0157d50..3323ea8c040421 100644 --- a/docs/src/configuring_zed.md +++ b/docs/src/configuring_zed.md @@ -681,6 +681,9 @@ These values take in the same options as the root-level settings with the same n "font_size": null, "option_as_meta": false, "shell": {}, + "toolbar": { + "title": true + }, "working_directory": "current_project_directory" } ``` @@ -839,6 +842,22 @@ See Buffer Font Features } ``` +## Terminal Toolbar + +- Description: Whether or not to show various elements in the terminal toolbar. It only affects terminals placed in the editor pane. +- Setting: `toolbar` +- Default: + +```json +"toolbar": { + "title": true, +}, +``` + +**Options** + +At the moment, only the `title` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`. If the title is hidden, the terminal toolbar is not displayed. + ### Working Directory - Description: What working directory to use when launching the terminal.