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 |
|--------|--------|--------|
|
|
|
|
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,