Skip to content

Commit

Permalink
Setting to show/hide terminal title (#8559)
Browse files Browse the repository at this point in the history
This PR adds settings for hiding title (breadcrumbs) from the terminal
toolbar. If the title is hidden, the toolbar disappears completely.

Example:

```json
"terminal": {
  "toolbar": {
    "title": true,
  }
}
```

[The PR that added the "toolbar"
setting](#7338) didn't affect
toolbars of the terminals that are placed in the editor pane. This PR
fixes that.


Release Notes:

- Added support for configuring the terminal toolbar ([8125](#8125))
  • Loading branch information
alygin authored Mar 1, 2024
1 parent 400fb12 commit 37f7957
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 2 deletions.
4 changes: 4 additions & 0 deletions assets/settings/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
17 changes: 17 additions & 0 deletions crates/terminal/src/terminal_settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -36,6 +41,7 @@ pub struct TerminalSettings {
pub default_height: Pixels,
pub detect_venv: VenvSettings,
pub max_scroll_history_lines: Option<usize>,
pub toolbar: Toolbar,
}

#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema)]
Expand Down Expand Up @@ -155,6 +161,8 @@ pub struct TerminalSettingsContent {
///
/// Default: 10_000
pub max_scroll_history_lines: Option<usize>,
/// Toolbar related settings
pub toolbar: Option<ToolbarContent>,
}

impl settings::Settings for TerminalSettings {
Expand Down Expand Up @@ -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<bool>,
}
21 changes: 19 additions & 2 deletions crates/terminal_view/src/terminal_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -90,6 +91,7 @@ pub struct TerminalView {
blink_epoch: usize,
can_navigate_to_selected_word: bool,
workspace_id: WorkspaceId,
show_title: bool,
_subscriptions: Vec<Subscription>,
_terminal_subscriptions: Vec<Subscription>,
}
Expand Down Expand Up @@ -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::<SettingsStore>(Self::settings_changed),
],
_terminal_subscriptions: terminal_subscriptions,
}
}
Expand Down Expand Up @@ -208,6 +215,12 @@ impl TerminalView {
self.context_menu = Some((context_menu, position, subscription));
}

fn settings_changed(&mut self, cx: &mut ViewContext<Self>) {
let settings = TerminalSettings::get_global(cx);
self.show_title = settings.toolbar.title;
cx.notify();
}

fn show_character_palette(&mut self, _: &ShowCharacterPalette, cx: &mut ViewContext<Self>) {
if !self
.terminal
Expand Down Expand Up @@ -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<Vec<BreadcrumbText>> {
Expand Down
19 changes: 19 additions & 0 deletions docs/src/configuring_zed.md
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
```
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit 37f7957

Please sign in to comment.