Procházet zdrojové kódy

feat(tui): console copy-to-clipboard via opentui (#5658)

Co-authored-by: Aiden Cline <[email protected]>
rari404 před 2 měsíci
rodič
revize
e8ac0b663b
1 změnil soubory, kde provedl 15 přidání a 1 odebrání
  1. 15 1
      packages/opencode/src/cli/cmd/tui/app.tsx

+ 15 - 1
packages/opencode/src/cli/cmd/tui/app.tsx

@@ -179,6 +179,20 @@ function App() {
   const exit = useExit()
   const promptRef = usePromptRef()
 
+  // Wire up console copy-to-clipboard via opentui's onCopySelection callback
+  renderer.console.onCopySelection = async (text: string) => {
+    if (!text || text.length === 0) return
+
+    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 writeOut is not in type definitions
+    renderer.writeOut(finalOsc52)
+    await Clipboard.copy(text)
+      .then(() => toast.show({ message: "Copied to clipboard", variant: "info" }))
+      .catch(toast.error)
+    renderer.clearSelection()
+  }
   const [terminalTitleEnabled, setTerminalTitleEnabled] = createSignal(kv.get("terminal_title_enabled", true))
 
   createEffect(() => {
@@ -447,7 +461,7 @@ function App() {
     {
       title: "Toggle console",
       category: "System",
-      value: "app.fps",
+      value: "app.console",
       onSelect: (dialog) => {
         renderer.console.toggle()
         dialog.clear()