diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx index 47bb162cb4bc..71a919fb3c48 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx @@ -8,6 +8,7 @@ import { createStore } from "solid-js/store" import { useEditorContext } from "@tui/context/editor" import { useSDK } from "@tui/context/sdk" import { useSync } from "@tui/context/sync" +import { useKeybind } from "@tui/context/keybind" import { getScrollAcceleration } from "../../util/scroll" import { useTuiConfig } from "../../context/tui-config" import { useTheme, selectedForeground } from "@tui/context/theme" @@ -82,6 +83,7 @@ export function Autocomplete(props: { const editor = useEditorContext() const sdk = useSDK() const sync = useSync() + const keybind = useKeybind() const command = useCommandDialog() const { theme } = useTheme() const dimensions = useTerminalDimensions() @@ -617,7 +619,7 @@ export function Autocomplete(props: { e.preventDefault() return } - if (name === "return") { + if (keybind.match("input_submit", e)) { select() e.preventDefault() return diff --git a/packages/opencode/src/cli/cmd/tui/component/textarea-keybindings.ts b/packages/opencode/src/cli/cmd/tui/component/textarea-keybindings.ts index 36ab03de545c..c2598097a5bb 100644 --- a/packages/opencode/src/cli/cmd/tui/component/textarea-keybindings.ts +++ b/packages/opencode/src/cli/cmd/tui/component/textarea-keybindings.ts @@ -64,10 +64,21 @@ export function useTextareaKeybindings() { return createMemo(() => { const keybinds = keybind.all - return [ - { name: "return", action: "submit" }, - { name: "return", meta: true, action: "newline" }, - ...TEXTAREA_ACTIONS.flatMap((action) => mapTextareaKeybindings(keybinds, action)), - ] satisfies KeyBinding[] + // Get user-defined bindings first + const userBindings = TEXTAREA_ACTIONS.flatMap((action) => + mapTextareaKeybindings(keybinds, action), + ) + + // Build defaults array, only adding defaults for unconfigured actions + const defaults: KeyBinding[] = [] + if (!userBindings.some((b) => b.action === "submit")) { + defaults.push({ name: "return", action: "submit" }) + } + if (!userBindings.some((b) => b.action === "newline")) { + defaults.push({ name: "return", meta: true, action: "newline" }) + } + + // User bindings come first so they take precedence over defaults + return [...userBindings, ...defaults] satisfies KeyBinding[] }) }