@@ -327,7 +327,7 @@
}
},
{
- "context": "AcpThread > Editor",
+ "context": "AcpThread > Editor && !use_modifier_to_send",
"use_key_equivalents": true,
"bindings": {
"enter": "agent::Chat",
@@ -336,6 +336,16 @@
"ctrl-shift-n": "agent::RejectAll"
}
},
+ {
+ "context": "AcpThread > Editor && use_modifier_to_send",
+ "use_key_equivalents": true,
+ "bindings": {
+ "ctrl-enter": "agent::Chat",
+ "shift-ctrl-r": "agent::OpenAgentDiff",
+ "ctrl-shift-y": "agent::KeepAll",
+ "ctrl-shift-n": "agent::RejectAll"
+ }
+ },
{
"context": "ThreadHistory",
"bindings": {
@@ -379,7 +379,7 @@
}
},
{
- "context": "AcpThread > Editor",
+ "context": "AcpThread > Editor && !use_modifier_to_send",
"use_key_equivalents": true,
"bindings": {
"enter": "agent::Chat",
@@ -388,6 +388,16 @@
"cmd-shift-n": "agent::RejectAll"
}
},
+ {
+ "context": "AcpThread > Editor && use_modifier_to_send",
+ "use_key_equivalents": true,
+ "bindings": {
+ "cmd-enter": "agent::Chat",
+ "shift-ctrl-r": "agent::OpenAgentDiff",
+ "cmd-shift-y": "agent::KeepAll",
+ "cmd-shift-n": "agent::RejectAll"
+ }
+ },
{
"context": "ThreadHistory",
"bindings": {
@@ -9,7 +9,7 @@ use anyhow::{Context as _, Result, anyhow};
use assistant_slash_commands::codeblock_fence_for_path;
use collections::{HashMap, HashSet};
use editor::{
- Anchor, AnchorRangeExt, ContextMenuOptions, ContextMenuPlacement, Editor, EditorElement,
+ Addon, Anchor, AnchorRangeExt, ContextMenuOptions, ContextMenuPlacement, Editor, EditorElement,
EditorEvent, EditorMode, EditorStyle, ExcerptId, FoldPlaceholder, MultiBuffer,
SemanticsProvider, ToOffset,
actions::Paste,
@@ -21,8 +21,8 @@ use futures::{
};
use gpui::{
AppContext, ClipboardEntry, Context, Entity, EventEmitter, FocusHandle, Focusable,
- HighlightStyle, Image, ImageFormat, Img, Subscription, Task, TextStyle, UnderlineStyle,
- WeakEntity,
+ HighlightStyle, Image, ImageFormat, Img, KeyContext, Subscription, Task, TextStyle,
+ UnderlineStyle, WeakEntity,
};
use language::{Buffer, Language};
use language_model::LanguageModelImage;
@@ -122,6 +122,7 @@ impl MessageEditor {
if prevent_slash_commands {
editor.set_semantics_provider(Some(semantics_provider.clone()));
}
+ editor.register_addon(MessageEditorAddon::new());
editor
});
@@ -1648,6 +1649,31 @@ fn parse_slash_command(text: &str) -> Option<(usize, usize)> {
None
}
+pub struct MessageEditorAddon {}
+
+impl MessageEditorAddon {
+ pub fn new() -> Self {
+ Self {}
+ }
+}
+
+impl Addon for MessageEditorAddon {
+ fn to_any(&self) -> &dyn std::any::Any {
+ self
+ }
+
+ fn to_any_mut(&mut self) -> Option<&mut dyn std::any::Any> {
+ Some(self)
+ }
+
+ fn extend_key_context(&self, key_context: &mut KeyContext, cx: &App) {
+ let settings = agent_settings::AgentSettings::get_global(cx);
+ if settings.use_modifier_to_send {
+ key_context.add("use_modifier_to_send");
+ }
+ }
+}
+
#[cfg(test)]
mod tests {
use std::{ops::Range, path::Path, sync::Arc};