Fix composer send shortcut conflicts
This commit is contained in:
@@ -8,7 +8,6 @@ export type KeyboardFocusScope =
|
||||
export type MessageInputKeyboardActionKind =
|
||||
| "focus"
|
||||
| "send"
|
||||
| "queue"
|
||||
| "dictation-toggle"
|
||||
| "dictation-cancel"
|
||||
| "dictation-confirm"
|
||||
|
||||
@@ -2,6 +2,7 @@ import { describe, expect, it, vi } from "vitest";
|
||||
import {
|
||||
buildKeyboardShortcutHelpSections,
|
||||
buildEffectiveBindings,
|
||||
getBindingIdForAction,
|
||||
resolveKeyboardShortcut,
|
||||
type ChordState,
|
||||
type KeyboardShortcutContext,
|
||||
@@ -413,6 +414,16 @@ describe("keyboard-shortcuts", () => {
|
||||
event: { key: "d", code: "KeyD", metaKey: true },
|
||||
context: { isMac: true, focusScope: "terminal" },
|
||||
},
|
||||
{
|
||||
name: "does not bind Cmd+Enter as a rebindable message queue shortcut",
|
||||
event: { key: "Enter", code: "Enter", metaKey: true },
|
||||
context: { isMac: true, focusScope: "message-input" },
|
||||
},
|
||||
{
|
||||
name: "does not bind Ctrl+Enter as a rebindable message queue shortcut",
|
||||
event: { key: "Enter", code: "Enter", ctrlKey: true },
|
||||
context: { isMac: false, focusScope: "message-input" },
|
||||
},
|
||||
{
|
||||
name: "does not interrupt agent when terminal is focused",
|
||||
event: { key: "Escape", code: "Escape" },
|
||||
@@ -600,4 +611,17 @@ describe("keyboard-shortcut help sections", () => {
|
||||
expect(openProject?.label).toBe("Open project");
|
||||
expect(showShortcuts?.noteKey).toBe("settings.shortcuts.helpNotes.showKeyboardShortcuts");
|
||||
});
|
||||
|
||||
it("does not expose Enter send behavior as rebindable shortcut rows", () => {
|
||||
const sections = buildKeyboardShortcutHelpSections({ isMac: true, isDesktop: true });
|
||||
|
||||
expect(findRow(sections, "message-input-send")).toBeNull();
|
||||
expect(findRow(sections, "message-input-queue")).toBeNull();
|
||||
expect(
|
||||
getBindingIdForAction("message-input-send", { isMac: true, isDesktop: true }),
|
||||
).toBeNull();
|
||||
expect(
|
||||
getBindingIdForAction("message-input-queue", { isMac: true, isDesktop: true }),
|
||||
).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -154,8 +154,6 @@ const SHORTCUT_HELP_LABEL_KEYS: Record<string, string> = {
|
||||
"voice-toggle": "settings.shortcuts.help.toggleVoiceMode",
|
||||
"dictation-toggle": "settings.shortcuts.help.startStopDictation",
|
||||
"agent-interrupt": "settings.shortcuts.help.interruptAgent",
|
||||
"message-input-send": "settings.shortcuts.help.sendMessage",
|
||||
"message-input-queue": "settings.shortcuts.help.queueMessage",
|
||||
"voice-mute-toggle": "settings.shortcuts.help.muteUnmuteVoiceMode",
|
||||
};
|
||||
|
||||
@@ -953,52 +951,6 @@ const SHORTCUT_BINDINGS: readonly ShortcutBinding[] = [
|
||||
keys: ["Esc"],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "message-input-send-enter",
|
||||
action: "message-input.action",
|
||||
combo: "Enter",
|
||||
when: { focusScope: "message-input", commandCenter: false },
|
||||
payload: { type: "message-input", kind: "send" },
|
||||
preventDefault: false,
|
||||
stopPropagation: false,
|
||||
help: {
|
||||
id: "message-input-send",
|
||||
section: "agent-input",
|
||||
label: "Send message",
|
||||
keys: ["Enter"],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "message-input-queue-cmd-enter-mac",
|
||||
action: "message-input.action",
|
||||
combo: "Cmd+Enter",
|
||||
when: { mac: true, focusScope: "message-input", commandCenter: false },
|
||||
payload: { type: "message-input", kind: "queue" },
|
||||
preventDefault: false,
|
||||
stopPropagation: false,
|
||||
help: {
|
||||
id: "message-input-queue",
|
||||
section: "agent-input",
|
||||
label: "Queue message",
|
||||
keys: ["mod", "Enter"],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "message-input-queue-ctrl-enter-non-mac",
|
||||
action: "message-input.action",
|
||||
combo: "Ctrl+Enter",
|
||||
when: { mac: false, focusScope: "message-input", commandCenter: false },
|
||||
payload: { type: "message-input", kind: "queue" },
|
||||
preventDefault: false,
|
||||
stopPropagation: false,
|
||||
help: {
|
||||
id: "message-input-queue",
|
||||
section: "agent-input",
|
||||
label: "Queue message",
|
||||
keys: ["mod", "Enter"],
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
id: "message-input-dictation-confirm-enter",
|
||||
action: "message-input.action",
|
||||
|
||||
@@ -284,15 +284,6 @@ describe("routeKeyboardShortcut — message-input.action", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("returns none for unsupported message-input kinds (queue)", () => {
|
||||
expect(
|
||||
routeKeyboardShortcut(
|
||||
{ action: "message-input.action", payload: { kind: "queue" } },
|
||||
makeCtx(),
|
||||
),
|
||||
).toEqual<ShortcutAction>({ kind: "none" });
|
||||
});
|
||||
|
||||
it("returns none when kind is missing", () => {
|
||||
expect(
|
||||
routeKeyboardShortcut({ action: "message-input.action", payload: null }, makeCtx()),
|
||||
|
||||
@@ -81,7 +81,6 @@ const MESSAGE_INPUT_DISPATCH: Record<
|
||||
"dictation-confirm": { id: "message-input.dictation-confirm", scope: "message-input" },
|
||||
"voice-toggle": { id: "message-input.voice-toggle", scope: "message-input" },
|
||||
"voice-mute-toggle": { id: "message-input.voice-mute-toggle", scope: "message-input" },
|
||||
queue: null,
|
||||
};
|
||||
|
||||
function hasPayloadKey<K extends "index" | "delta" | "kind">(
|
||||
|
||||
Reference in New Issue
Block a user