From 8f3c87ffdbaa88fc57de8eb80765bf8575ed83dc Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Fri, 10 Oct 2025 14:31:47 -0400 Subject: [PATCH] tui: fix clipboard copy functionality in tmux sessions - Add proper tmux DCS passthrough wrapper for OSC52 sequences - Users can now copy text to clipboard when running TUI inside tmux - Previously clipboard copy would fail in SSH/tmux environments --- packages/opencode/src/cli/cmd/tui/attach.tsx | 6 +++++- packages/opencode/src/cli/cmd/tui/util/clipboard.ts | 3 --- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/attach.tsx b/packages/opencode/src/cli/cmd/tui/attach.tsx index 9f70cdf99..1086451fe 100644 --- a/packages/opencode/src/cli/cmd/tui/attach.tsx +++ b/packages/opencode/src/cli/cmd/tui/attach.tsx @@ -186,7 +186,11 @@ function App(props: { onExit: () => void }) { onMouseUp={async () => { const text = renderer.getSelection()?.getSelectedText() if (text && text.length > 0) { - console.log("copying", text) + const base64 = Buffer.from(text).toString("base64") + const osc52 = `\x1b]52;c;${base64}\x07` + const finalOsc52 = process.env["TMUX"] ? `\x1bPtmux;\x1b${osc52}\x1b\\` : osc52 + /* @ts-expect-error */ + renderer.writeOut(finalOsc52) await Clipboard.copy(text) renderer.clearSelection() } diff --git a/packages/opencode/src/cli/cmd/tui/util/clipboard.ts b/packages/opencode/src/cli/cmd/tui/util/clipboard.ts index 32adeef49..0a73b7ec8 100644 --- a/packages/opencode/src/cli/cmd/tui/util/clipboard.ts +++ b/packages/opencode/src/cli/cmd/tui/util/clipboard.ts @@ -112,9 +112,6 @@ export namespace Clipboard { }) export async function copy(text: string): Promise { - const base64 = Buffer.from(text).toString("base64") - const osc52 = `\x1b]52;c;${base64}\x07` - process.stdout.write(osc52) await getCopyMethod()(text) } }