From e803815b1645b551b096fc77f16a3d7485c6fdd7 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 28 Nov 2024 00:06:23 +0200 Subject: [PATCH] Use proper context to show terminal split menu bindings (#21253) Follow-up of https://github.com/zed-industries/zed/pull/21251 Show proper keybindings on the terminal split button: image Release Notes: - N/A --- crates/terminal_view/src/terminal_panel.rs | 25 ++++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 4d8d197aea9deaf418e396842e233c6a543ae9b5..1bc8a9e19b0e1af0e84209c354a32b36eb2d0583 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -26,8 +26,8 @@ use terminal::{ Terminal, }; use ui::{ - div, h_flex, ButtonCommon, Clickable, ContextMenu, IconButton, IconSize, InteractiveElement, - PopoverMenu, Selectable, Tooltip, + div, h_flex, ButtonCommon, Clickable, ContextMenu, FluentBuilder, IconButton, IconSize, + InteractiveElement, PopoverMenu, Selectable, Tooltip, }; use util::{ResultExt, TryFutureExt}; use workspace::{ @@ -130,6 +130,10 @@ impl TerminalPanel { let assistant_tab_bar_button = self.assistant_tab_bar_button.clone(); terminal_pane.update(cx, |pane, cx| { pane.set_render_tab_bar_buttons(cx, move |pane, cx| { + let split_context = pane + .items() + .find_map(|item| item.downcast::()) + .map(|terminal_view| terminal_view.read(cx).focus_handle.clone()); if !pane.has_focus(cx) && !pane.context_menu_focused(cx) { return (None, None); } @@ -175,14 +179,21 @@ impl TerminalPanel { ) .anchor(AnchorCorner::TopRight) .with_handle(pane.split_item_context_menu_handle.clone()) - .menu(move |cx| { - ContextMenu::build(cx, |menu, _| { - menu.action("Split Right", SplitRight.boxed_clone()) + .menu({ + let split_context = split_context.clone(); + move |cx| { + ContextMenu::build(cx, |menu, _| { + menu.when_some( + split_context.clone(), + |menu, split_context| menu.context(split_context), + ) + .action("Split Right", SplitRight.boxed_clone()) .action("Split Left", SplitLeft.boxed_clone()) .action("Split Up", SplitUp.boxed_clone()) .action("Split Down", SplitDown.boxed_clone()) - }) - .into() + }) + .into() + } }), ) .child({