From 92484589285e9a5562d85fa7d74965143d9d8c58 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:27:52 -0300 Subject: [PATCH] assistant2: Change model selector keybinding and make it visible (#22965) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We weren't showing the keybinding in none of the places where the model selector was visible. Also, I took advantage of the opportunity to change the keybinding for two reasons: 1. `cmd-shift-m` caused conflict if on an editor (inline assistant case) 2. `cmd-opt-/` is the one Cursor uses; so consistency with something that might be already consolidated sounds like a low-hanging fruit | Editor Inline Assist | Terminal Inline Assist | Assistant Panel | |--------|--------|--------| | Screenshot 2025-01-10 at 11 01 24 AM | Screenshot 2025-01-10 at 11 01 29 AM | Screenshot 2025-01-10 at 11 01 33 AM | Release Notes: - N/A --- assets/keymaps/default-linux.json | 4 ++-- assets/keymaps/default-macos.json | 5 +++-- crates/assistant2/src/assistant_model_selector.rs | 8 +++++--- crates/assistant2/src/inline_prompt_editor.rs | 14 ++++++++++++-- crates/assistant2/src/message_editor.rs | 7 ++++++- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/assets/keymaps/default-linux.json b/assets/keymaps/default-linux.json index 2548ec4a08e90e..09bf3bd9fd3864 100644 --- a/assets/keymaps/default-linux.json +++ b/assets/keymaps/default-linux.json @@ -175,7 +175,7 @@ "ctrl-shift-e": "project_panel::ToggleFocus", "ctrl-g": "search::SelectNextMatch", "ctrl-shift-g": "search::SelectPrevMatch", - "ctrl-shift-m": "assistant::ToggleModelSelector", + "ctrl-alt-/": "assistant::ToggleModelSelector", "ctrl-k h": "assistant::DeployHistory", "ctrl-k l": "assistant::DeployPromptLibrary", "ctrl-n": "assistant::NewContext" @@ -572,7 +572,7 @@ "bindings": { "ctrl-n": "assistant2::NewThread", "ctrl-shift-h": "assistant2::OpenHistory", - "ctrl-shift-m": "assistant2::ToggleModelSelector", + "ctrl-alt-/": "assistant2::ToggleModelSelector", "ctrl-shift-a": "assistant2::ToggleContextPicker", "ctrl-alt-e": "assistant2::RemoveAllContext" } diff --git a/assets/keymaps/default-macos.json b/assets/keymaps/default-macos.json index 0bc1689ee0db16..8e6ceb4ddcb50e 100644 --- a/assets/keymaps/default-macos.json +++ b/assets/keymaps/default-macos.json @@ -199,7 +199,7 @@ "cmd-shift-e": "project_panel::ToggleFocus", "cmd-g": "search::SelectNextMatch", "cmd-shift-g": "search::SelectPrevMatch", - "cmd-shift-m": "assistant::ToggleModelSelector", + "cmd-alt-/": "assistant::ToggleModelSelector", "cmd-k h": "assistant::DeployHistory", "cmd-k l": "assistant::DeployPromptLibrary", "cmd-n": "assistant::NewContext" @@ -226,7 +226,7 @@ "bindings": { "cmd-n": "assistant2::NewThread", "cmd-shift-h": "assistant2::OpenHistory", - "cmd-shift-m": "assistant2::ToggleModelSelector", + "cmd-alt-/": "assistant2::ToggleModelSelector", "cmd-shift-a": "assistant2::ToggleContextPicker", "cmd-alt-e": "assistant2::RemoveAllContext" } @@ -616,6 +616,7 @@ "use_key_equivalents": true, "bindings": { "cmd-shift-a": "assistant2::ToggleContextPicker", + "cmd-alt-/": "assistant2::ToggleModelSelector", "cmd-alt-e": "assistant2::RemoveAllContext", "ctrl-[": "assistant::CyclePreviousInlineAssist", "ctrl-]": "assistant::CycleNextInlineAssist" diff --git a/crates/assistant2/src/assistant_model_selector.rs b/crates/assistant2/src/assistant_model_selector.rs index 86f37a9a6cc4e1..bd243a70895270 100644 --- a/crates/assistant2/src/assistant_model_selector.rs +++ b/crates/assistant2/src/assistant_model_selector.rs @@ -1,5 +1,5 @@ use fs::Fs; -use gpui::View; +use gpui::{FocusHandle, View}; use language_model::LanguageModelRegistry; use language_model_selector::{LanguageModelSelector, LanguageModelSelectorPopoverMenu}; use settings::update_settings_file; @@ -11,12 +11,14 @@ use crate::{assistant_settings::AssistantSettings, ToggleModelSelector}; pub struct AssistantModelSelector { selector: View, menu_handle: PopoverMenuHandle, + focus_handle: FocusHandle, } impl AssistantModelSelector { pub(crate) fn new( fs: Arc, menu_handle: PopoverMenuHandle, + focus_handle: FocusHandle, cx: &mut WindowContext, ) -> Self { Self { @@ -34,6 +36,7 @@ impl AssistantModelSelector { ) }), menu_handle, + focus_handle, } } } @@ -41,7 +44,7 @@ impl AssistantModelSelector { impl Render for AssistantModelSelector { fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { let active_model = LanguageModelRegistry::read_global(cx).active_model(); - let focus_handle = self.selector.focus_handle(cx).clone(); + let focus_handle = self.focus_handle.clone(); LanguageModelSelectorPopoverMenu::new( self.selector.clone(), @@ -49,7 +52,6 @@ impl Render for AssistantModelSelector { .style(ButtonStyle::Subtle) .child( h_flex() - .w_full() .gap_0p5() .child( div() diff --git a/crates/assistant2/src/inline_prompt_editor.rs b/crates/assistant2/src/inline_prompt_editor.rs index 9ab660eb23b9d2..6683f6bc228f7b 100644 --- a/crates/assistant2/src/inline_prompt_editor.rs +++ b/crates/assistant2/src/inline_prompt_editor.rs @@ -842,7 +842,12 @@ impl PromptEditor { context_strip, context_picker_menu_handle, model_selector: cx.new_view(|cx| { - AssistantModelSelector::new(fs, model_selector_menu_handle.clone(), cx) + AssistantModelSelector::new( + fs, + model_selector_menu_handle.clone(), + prompt_editor.focus_handle(cx), + cx, + ) }), model_selector_menu_handle, edited_since_done: false, @@ -989,7 +994,12 @@ impl PromptEditor { context_strip, context_picker_menu_handle, model_selector: cx.new_view(|cx| { - AssistantModelSelector::new(fs, model_selector_menu_handle.clone(), cx) + AssistantModelSelector::new( + fs, + model_selector_menu_handle.clone(), + prompt_editor.focus_handle(cx), + cx, + ) }), model_selector_menu_handle, edited_since_done: false, diff --git a/crates/assistant2/src/message_editor.rs b/crates/assistant2/src/message_editor.rs index a86a9efb3dc651..cd4c5899ee773d 100644 --- a/crates/assistant2/src/message_editor.rs +++ b/crates/assistant2/src/message_editor.rs @@ -100,7 +100,12 @@ impl MessageEditor { inline_context_picker, inline_context_picker_menu_handle, model_selector: cx.new_view(|cx| { - AssistantModelSelector::new(fs, model_selector_menu_handle.clone(), cx) + AssistantModelSelector::new( + fs, + model_selector_menu_handle.clone(), + editor.focus_handle(cx), + cx, + ) }), model_selector_menu_handle, use_tools: false,