From 5073cba08d47075be75ee0370bcc5f9653c0971b Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 30 Apr 2025 08:10:14 -0300 Subject: [PATCH] agent: Add keybindings to open the panel's extra menu (#29663) Maybe "extra" isn't the best word, but I'm referring to the ellipsis menu on the far right of the panel that holds "extra" or "additional options". There is a known issue with context menus, at least if implemented this way, that makes hitting enter to select an option not work. Will leave this fix to a later PR. Release Notes: - N/A --- assets/keymaps/default-linux.json | 1 + assets/keymaps/default-macos.json | 1 + crates/agent/src/assistant.rs | 1 + crates/agent/src/assistant_panel.rs | 40 ++++++++++++++++++++++++----- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/assets/keymaps/default-linux.json b/assets/keymaps/default-linux.json index 4a9f647d2f6fc20d86f552a02ffe287355696231..4fa90a88f1592993ea1e4c40b1f559f24f43feab 100644 --- a/assets/keymaps/default-linux.json +++ b/assets/keymaps/default-linux.json @@ -246,6 +246,7 @@ "ctrl-alt-/": "assistant::ToggleModelSelector", "ctrl-shift-a": "agent::ToggleContextPicker", "ctrl-shift-o": "agent::ToggleNavigationMenu", + "ctrl-shift-i": "agent::ToggleOptionsMenu", "shift-escape": "agent::ExpandMessageEditor", "ctrl-e": "agent::ChatMode", "ctrl-alt-e": "agent::RemoveAllContext" diff --git a/assets/keymaps/default-macos.json b/assets/keymaps/default-macos.json index 2393372c9131cfc32685c39797895f4ffd44cb70..ef0e197ce02ce635fe0dd70b8c2ce6f591fe2b63 100644 --- a/assets/keymaps/default-macos.json +++ b/assets/keymaps/default-macos.json @@ -291,6 +291,7 @@ "cmd-alt-/": "assistant::ToggleModelSelector", "cmd-shift-a": "agent::ToggleContextPicker", "cmd-shift-o": "agent::ToggleNavigationMenu", + "cmd-shift-i": "agent::ToggleOptionsMenu", "shift-escape": "agent::ExpandMessageEditor", "cmd-e": "agent::ChatMode", "cmd-alt-e": "agent::RemoveAllContext" diff --git a/crates/agent/src/assistant.rs b/crates/agent/src/assistant.rs index 3947e42ede88bd8873f82fb7d7d5c5b0a28d3fdf..3c9b915b87b7568f32c8e697600a15eff790a7f1 100644 --- a/crates/agent/src/assistant.rs +++ b/crates/agent/src/assistant.rs @@ -51,6 +51,7 @@ actions!( NewTextThread, ToggleContextPicker, ToggleNavigationMenu, + ToggleOptionsMenu, DeleteRecentlyOpenThread, ToggleProfileSelector, RemoveAllContext, diff --git a/crates/agent/src/assistant_panel.rs b/crates/agent/src/assistant_panel.rs index 29c9fde5df40b30956b0425469f60d407c9650a5..28e3ac45209865291cf4586d4146f8171df1c4f5 100644 --- a/crates/agent/src/assistant_panel.rs +++ b/crates/agent/src/assistant_panel.rs @@ -50,7 +50,7 @@ use crate::ui::UsageBanner; use crate::{ AddContextServer, AgentDiff, DeleteRecentlyOpenThread, ExpandMessageEditor, InlineAssistant, NewTextThread, NewThread, OpenActiveThreadAsMarkdown, OpenAgentDiff, OpenHistory, ThreadEvent, - ToggleContextPicker, ToggleNavigationMenu, + ToggleContextPicker, ToggleNavigationMenu, ToggleOptionsMenu, }; pub fn init(cx: &mut App) { @@ -113,6 +113,14 @@ pub fn init(cx: &mut App) { panel.toggle_navigation_menu(&ToggleNavigationMenu, window, cx); }); } + }) + .register_action(|workspace, _: &ToggleOptionsMenu, window, cx| { + if let Some(panel) = workspace.panel::(cx) { + workspace.focus_panel::(window, cx); + panel.update(cx, |panel, cx| { + panel.toggle_options_menu(&ToggleOptionsMenu, window, cx); + }); + } }); }, ) @@ -914,6 +922,15 @@ impl AssistantPanel { self.assistant_navigation_menu_handle.toggle(window, cx); } + pub fn toggle_options_menu( + &mut self, + _: &ToggleOptionsMenu, + window: &mut Window, + cx: &mut Context, + ) { + self.assistant_dropdown_menu_handle.toggle(window, cx); + } + pub fn open_agent_diff( &mut self, _: &OpenAgentDiff, @@ -1356,12 +1373,22 @@ impl AssistantPanel { }), ); - let agent_extra_menu = PopoverMenu::new("assistant-menu") + let agent_extra_menu = PopoverMenu::new("agent-options-menu") .trigger_with_tooltip( - IconButton::new("new", IconName::Ellipsis) - .icon_size(IconSize::Small) - .style(ButtonStyle::Subtle), - Tooltip::text("Toggle Agent Menu"), + IconButton::new("agent-options-menu", IconName::Ellipsis) + .icon_size(IconSize::Small), + { + let focus_handle = focus_handle.clone(); + move |window, cx| { + Tooltip::for_action_in( + "Toggle Agent Menu", + &ToggleOptionsMenu, + &focus_handle, + window, + cx, + ) + } + }, ) .anchor(Corner::TopRight) .with_handle(self.assistant_dropdown_menu_handle.clone()) @@ -2150,6 +2177,7 @@ impl Render for AssistantPanel { .on_action(cx.listener(Self::open_agent_diff)) .on_action(cx.listener(Self::go_back)) .on_action(cx.listener(Self::toggle_navigation_menu)) + .on_action(cx.listener(Self::toggle_options_menu)) .child(self.render_toolbar(window, cx)) .map(|parent| match &self.active_view { ActiveView::Thread { .. } => parent