From 5a18d2369adc84e7ccc1db4eeefab9d667d838b9 Mon Sep 17 00:00:00 2001 From: Kyle Altendorf Date: Mon, 9 Mar 2026 12:09:01 -0400 Subject: [PATCH] fix(tui): check for selected text instead of any selection in dialog escape handler renderer.getSelection() returns a non-null Selection object from a simple click on selectable text (no drag needed). This blocks Escape from dismissing dialogs opened via mouse click. Use getSelectedText() to only block Escape when there is actual text selected, matching the pattern already used in session/index.tsx. --- packages/opencode/src/cli/cmd/tui/ui/dialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx b/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx index 8cebd9cba54d..43f1a1ff58d4 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx +++ b/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx @@ -70,7 +70,7 @@ function init() { useKeyboard((evt) => { if (store.stack.length === 0) return if (evt.defaultPrevented) return - if ((evt.name === "escape" || (evt.ctrl && evt.name === "c")) && renderer.getSelection()) return + if ((evt.name === "escape" || (evt.ctrl && evt.name === "c")) && renderer.getSelection()?.getSelectedText()) return if (evt.name === "escape" || (evt.ctrl && evt.name === "c")) { const current = store.stack.at(-1)! current.onClose?.()