From aacaac55d8e058a718ba2896c47af6813beb8a04 Mon Sep 17 00:00:00 2001 From: Hanson Mei Date: Tue, 26 May 2026 12:52:16 +0800 Subject: [PATCH] fix: allow OSC52 clipboard in remote macOS TUI --- frontends/tuiapp_v2.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/frontends/tuiapp_v2.py b/frontends/tuiapp_v2.py index 2c7244d40..9e2a074ae 100644 --- a/frontends/tuiapp_v2.py +++ b/frontends/tuiapp_v2.py @@ -2170,17 +2170,18 @@ def action_next_session(self) -> None: self._refresh_all() def copy_to_clipboard(self, text: str) -> None: - """Override Textual's OSC 52 clipboard (broken on macOS Terminal.app). - Use pbcopy on macOS, fall back to OSC 52 on other platforms.""" - import sys, subprocess as _sp - if sys.platform == "darwin": + """Copy locally on macOS, and use OSC 52 when the UI may be remote.""" + import subprocess as _sp + prefer_osc52 = os.environ.get("GA_TUI_CLIPBOARD", "").lower() in {"osc52", "terminal"} + remote_tty = any(os.environ.get(k) for k in ("SSH_TTY", "SSH_CONNECTION", "SSH_CLIENT", "TMUX")) + if sys.platform == "darwin" and not prefer_osc52: try: _sp.Popen(["pbcopy"], stdin=_sp.PIPE, stdout=_sp.DEVNULL, stderr=_sp.DEVNULL).communicate(text.encode("utf-8")) self._clipboard = text - return + if not remote_tty: + return except Exception: pass - # Non-macOS or pbcopy failed: fall back to Textual default (OSC 52) super().copy_to_clipboard(text) def action_handle_ctrl_c(self) -> None: