From c72f8b17c67f21e62cdb2502ad3b55c2c01db4bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Sat, 1 Nov 2025 01:12:28 +0100 Subject: [PATCH] fix: tui: Fix /editor command (#3663) --- .../src/cli/cmd/tui/component/dialog-command.tsx | 4 ++-- .../src/cli/cmd/tui/component/prompt/autocomplete.tsx | 2 +- .../opencode/src/cli/cmd/tui/component/prompt/index.tsx | 9 ++------- packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx | 2 +- packages/opencode/src/cli/cmd/tui/util/editor.ts | 1 + 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx index 4b648e9d..66a312e5 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx @@ -41,10 +41,10 @@ function init() { }) const result = { - trigger(name: string) { + trigger(name: string, source?: "prompt") { for (const option of options()) { if (option.value === name) { - option.onSelect?.(dialog) + option.onSelect?.(dialog, source) return } } 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 4f97d788..ed46042b 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx @@ -263,7 +263,7 @@ export function Autocomplete(props: { { display: "/editor", description: "open editor", - onSelect: () => command.trigger("prompt.editor"), + onSelect: () => command.trigger("prompt.editor", "prompt"), }, { display: "/help", diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index 8c52ba3a..f72b1489 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -98,14 +98,9 @@ export function Prompt(props: PromptProps) { category: "Session", keybind: "editor_open", value: "prompt.editor", - onSelect: async (dialog) => { + onSelect: async (dialog, trigger) => { dialog.clear() - const value = input.plainText - input.clear() - setStore("prompt", { - input: "", - parts: [], - }) + const value = trigger === "prompt" ? "" : input.plainText const content = await Editor.open({ value, renderer }) if (content) { input.setText(content, { history: false }) diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx index ee488810..515c7c3d 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx +++ b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx @@ -35,7 +35,7 @@ export interface DialogSelectOption { category?: string disabled?: boolean bg?: RGBA - onSelect?: (ctx: DialogContext) => void + onSelect?: (ctx: DialogContext, trigger?: "prompt") => void } export type DialogSelectRef = { diff --git a/packages/opencode/src/cli/cmd/tui/util/editor.ts b/packages/opencode/src/cli/cmd/tui/util/editor.ts index 25a17fc7..0aa69dcd 100644 --- a/packages/opencode/src/cli/cmd/tui/util/editor.ts +++ b/packages/opencode/src/cli/cmd/tui/util/editor.ts @@ -24,6 +24,7 @@ export namespace Editor { }) await proc.exited const content = await Bun.file(filepath).text() + opts.renderer.currentRenderBuffer.clear() opts.renderer.resume() opts.renderer.requestRender() return content || undefined