Add terminal::Toggle (#37585)

Co-Authored-By: Brandan <b5@n0.computer>

Release Notes:

- Added a new action `terminal::Toggle` that is by default bound to
'ctrl-\`'. This copies the default behaviour from VSCode and Jetbrains
where the terminal opens and closes correctly. If you'd like the old
behaviour you can rebind 'ctrl-\`' to `terminal::ToggleFocus`

Co-authored-by: Brandan <b5@n0.computer>
This commit is contained in:
Conrad Irwin
2025-09-05 17:34:39 +00:00
committed by GitHub
co-authored by Brandan
parent b65fb06264
commit 5d374193bb
8 changed files with 26 additions and 7 deletions
+1 -1
View File
@@ -583,7 +583,7 @@
"ctrl-n": "workspace::NewFile",
"shift-new": "workspace::NewWindow",
"ctrl-shift-n": "workspace::NewWindow",
"ctrl-`": "terminal_panel::ToggleFocus",
"ctrl-`": "terminal_panel::Toggle",
"f10": ["app_menu::OpenApplicationMenu", "Zed"],
"alt-1": ["workspace::ActivatePane", 0],
"alt-2": ["workspace::ActivatePane", 1],
+1 -1
View File
@@ -649,7 +649,7 @@
"alt-shift-enter": "toast::RunAction",
"cmd-shift-s": "workspace::SaveAs",
"cmd-shift-n": "workspace::NewWindow",
"ctrl-`": "terminal_panel::ToggleFocus",
"ctrl-`": "terminal_panel::Toggle",
"cmd-1": ["workspace::ActivatePane", 0],
"cmd-2": ["workspace::ActivatePane", 1],
"cmd-3": ["workspace::ActivatePane", 2],
+1 -1
View File
@@ -599,7 +599,7 @@
"ctrl-n": "workspace::NewFile",
"shift-new": "workspace::NewWindow",
"ctrl-shift-n": "workspace::NewWindow",
"ctrl-`": "terminal_panel::ToggleFocus",
"ctrl-`": "terminal_panel::Toggle",
"f10": ["app_menu::OpenApplicationMenu", "Zed"],
"alt-1": ["workspace::ActivatePane", 0],
"alt-2": ["workspace::ActivatePane", 1],
+1 -1
View File
@@ -125,7 +125,7 @@
{
"context": "Workspace || Editor",
"bindings": {
"alt-f12": "terminal_panel::ToggleFocus",
"alt-f12": "terminal_panel::Toggle",
"ctrl-shift-k": "git::Push"
}
},
+1 -1
View File
@@ -127,7 +127,7 @@
{
"context": "Workspace || Editor",
"bindings": {
"alt-f12": "terminal_panel::ToggleFocus",
"alt-f12": "terminal_panel::Toggle",
"cmd-shift-k": "git::Push"
}
},
@@ -49,6 +49,8 @@ const TERMINAL_PANEL_KEY: &str = "TerminalPanel";
actions!(
terminal_panel,
[
/// Toggles the terminal panel.
Toggle,
/// Toggles focus on the terminal panel.
ToggleFocus
]
@@ -64,6 +66,13 @@ pub fn init(cx: &mut App) {
workspace.toggle_panel_focus::<TerminalPanel>(window, cx);
}
});
workspace.register_action(|workspace, _: &Toggle, window, cx| {
if is_enabled_in_workspace(workspace, cx) {
if !workspace.toggle_panel_focus::<TerminalPanel>(window, cx) {
workspace.close_panel::<TerminalPanel>(window, cx);
}
}
});
},
)
.detach();
+2 -2
View File
@@ -1265,8 +1265,8 @@ fn generate_commands(_: &App) -> Vec<VimCommand> {
VimCommand::str(("L", "explore"), "project_panel::ToggleFocus"),
VimCommand::str(("S", "explore"), "project_panel::ToggleFocus"),
VimCommand::str(("Ve", "xplore"), "project_panel::ToggleFocus"),
VimCommand::str(("te", "rm"), "terminal_panel::ToggleFocus"),
VimCommand::str(("T", "erm"), "terminal_panel::ToggleFocus"),
VimCommand::str(("te", "rm"), "terminal_panel::Toggle"),
VimCommand::str(("T", "erm"), "terminal_panel::Toggle"),
VimCommand::str(("C", "ollab"), "collab_panel::ToggleFocus"),
VimCommand::str(("Ch", "at"), "chat_panel::ToggleFocus"),
VimCommand::str(("No", "tifications"), "notification_panel::ToggleFocus"),
+10
View File
@@ -3093,6 +3093,16 @@ impl Workspace {
}
}
pub fn close_panel<T: Panel>(&self, window: &mut Window, cx: &mut Context<Self>) {
for dock in self.all_docks().iter() {
dock.update(cx, |dock, cx| {
if dock.panel::<T>().is_some() {
dock.set_open(false, window, cx)
}
})
}
}
pub fn panel<T: Panel>(&self, cx: &App) -> Option<Entity<T>> {
self.all_docks()
.iter()