diff --git a/assets/keymaps/default-linux.json b/assets/keymaps/default-linux.json index f5bdb372bb..0e88b9e26f 100644 --- a/assets/keymaps/default-linux.json +++ b/assets/keymaps/default-linux.json @@ -274,6 +274,7 @@ "context": "MessageEditor > Editor", "bindings": { "enter": "agent::Chat", + "ctrl-enter": "agent::ChatWithFollow", "ctrl-i": "agent::ToggleProfileSelector", "shift-ctrl-r": "agent::OpenAgentDiff" } diff --git a/assets/keymaps/default-macos.json b/assets/keymaps/default-macos.json index 5ace971049..0193657434 100644 --- a/assets/keymaps/default-macos.json +++ b/assets/keymaps/default-macos.json @@ -311,6 +311,7 @@ "use_key_equivalents": true, "bindings": { "enter": "agent::Chat", + "cmd-enter": "agent::ChatWithFollow", "cmd-i": "agent::ToggleProfileSelector", "shift-ctrl-r": "agent::OpenAgentDiff" } diff --git a/crates/agent/src/agent.rs b/crates/agent/src/agent.rs index f0e4365bae..bd7f0edddd 100644 --- a/crates/agent/src/agent.rs +++ b/crates/agent/src/agent.rs @@ -69,6 +69,7 @@ actions!( AddContextServer, RemoveSelectedThread, Chat, + ChatWithFollow, CycleNextInlineAssist, CyclePreviousInlineAssist, FocusUp, diff --git a/crates/agent/src/message_editor.rs b/crates/agent/src/message_editor.rs index 8662b2bf37..c4306baedf 100644 --- a/crates/agent/src/message_editor.rs +++ b/crates/agent/src/message_editor.rs @@ -49,8 +49,9 @@ use crate::profile_selector::ProfileSelector; use crate::thread::{MessageCrease, Thread, TokenUsageRatio}; use crate::thread_store::{TextThreadStore, ThreadStore}; use crate::{ - ActiveThread, AgentDiffPane, Chat, ExpandMessageEditor, Follow, NewThread, OpenAgentDiff, - RemoveAllContext, ToggleContextPicker, ToggleProfileSelector, register_agent_preview, + ActiveThread, AgentDiffPane, Chat, ChatWithFollow, ExpandMessageEditor, Follow, NewThread, + OpenAgentDiff, RemoveAllContext, ToggleContextPicker, ToggleProfileSelector, + register_agent_preview, }; #[derive(RegisterComponent)] @@ -302,6 +303,21 @@ impl MessageEditor { cx.notify(); } + fn chat_with_follow( + &mut self, + _: &ChatWithFollow, + window: &mut Window, + cx: &mut Context, + ) { + self.workspace + .update(cx, |this, cx| { + this.follow(CollaboratorId::Agent, window, cx) + }) + .log_err(); + + self.chat(&Chat, window, cx); + } + fn is_editor_empty(&self, cx: &App) -> bool { self.editor.read(cx).text(cx).trim().is_empty() } @@ -562,6 +578,7 @@ impl MessageEditor { v_flex() .key_context("MessageEditor") .on_action(cx.listener(Self::chat)) + .on_action(cx.listener(Self::chat_with_follow)) .on_action(cx.listener(|this, _: &ToggleProfileSelector, window, cx| { this.profile_selector .read(cx)