From e9a17e4480c8295ae3f72d4ea68c55ae07bfdc41 Mon Sep 17 00:00:00 2001 From: AbigailJixiangyuyu <129409676+AbigailJixiangyuyu@users.noreply.github.com> Date: Tue, 17 Mar 2026 06:11:02 +0800 Subject: [PATCH] fix(windows): restore /editor support on Windows (#17146) --- .../opencode/src/cli/cmd/tui/util/editor.ts | 28 +++++++++++-------- packages/opencode/src/util/process.ts | 3 ++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/util/editor.ts b/packages/opencode/src/cli/cmd/tui/util/editor.ts index 6d32c63c0..9eaae99fc 100644 --- a/packages/opencode/src/cli/cmd/tui/util/editor.ts +++ b/packages/opencode/src/cli/cmd/tui/util/editor.ts @@ -17,17 +17,21 @@ export namespace Editor { await Filesystem.write(filepath, opts.value) opts.renderer.suspend() opts.renderer.currentRenderBuffer.clear() - const parts = editor.split(" ") - const proc = Process.spawn([...parts, filepath], { - stdin: "inherit", - stdout: "inherit", - stderr: "inherit", - }) - await proc.exited - const content = await Filesystem.readText(filepath) - opts.renderer.currentRenderBuffer.clear() - opts.renderer.resume() - opts.renderer.requestRender() - return content || undefined + try { + const parts = editor.split(" ") + const proc = Process.spawn([...parts, filepath], { + stdin: "inherit", + stdout: "inherit", + stderr: "inherit", + shell: process.platform === "win32", + }) + await proc.exited + const content = await Filesystem.readText(filepath) + return content || undefined + } finally { + opts.renderer.currentRenderBuffer.clear() + opts.renderer.resume() + opts.renderer.requestRender() + } } } diff --git a/packages/opencode/src/util/process.ts b/packages/opencode/src/util/process.ts index 049096937..9b37432c3 100644 --- a/packages/opencode/src/util/process.ts +++ b/packages/opencode/src/util/process.ts @@ -3,6 +3,7 @@ import { buffer } from "node:stream/consumers" export namespace Process { export type Stdio = "inherit" | "pipe" | "ignore" + export type Shell = boolean | string export interface Options { cwd?: string @@ -10,6 +11,7 @@ export namespace Process { stdin?: Stdio stdout?: Stdio stderr?: Stdio + shell?: Shell abort?: AbortSignal kill?: NodeJS.Signals | number timeout?: number @@ -60,6 +62,7 @@ export namespace Process { cwd: opts.cwd, env: opts.env === null ? {} : opts.env ? { ...process.env, ...opts.env } : undefined, stdio: [opts.stdin ?? "ignore", opts.stdout ?? "ignore", opts.stderr ?? "ignore"], + shell: opts.shell, windowsHide: process.platform === "win32", })