Add OSC52 support

This commit is contained in:
2026-04-27 23:25:16 +10:00
parent bb87d7d84c
commit 645af1f660
2 changed files with 18 additions and 0 deletions

View File

@@ -88,6 +88,7 @@ class TerminalSession: NSObject, ObservableObject, LocalProcessDelegate, @precon
super.init() super.init()
terminalView.terminalDelegate = self terminalView.terminalDelegate = self
installOsc52ClipboardHandler()
let font = NSFont.monospacedSystemFont(ofSize: fontSize, weight: .regular) let font = NSFont.monospacedSystemFont(ofSize: fontSize, weight: .regular)
terminalView.font = font terminalView.font = font
@@ -153,6 +154,23 @@ class TerminalSession: NSObject, ObservableObject, LocalProcessDelegate, @precon
return ProcessInfo.processInfo.environment["SHELL"] ?? "/bin/zsh" return ProcessInfo.processInfo.environment["SHELL"] ?? "/bin/zsh"
} }
private func installOsc52ClipboardHandler() {
let maxPayloadSize = 1_048_576 // 1 MB
terminalView.getTerminal().registerOscHandler(code: 52) { [weak self] data in
guard data.count >= 2,
data[data.startIndex] == UInt8(ascii: "c"),
data[data.startIndex + 1] == UInt8(ascii: ";") else { return }
let base64 = Data(data[(data.startIndex + 2)...])
guard let content = Data(base64Encoded: base64),
content.count <= maxPayloadSize,
let string = String(data: content, encoding: .utf8) else { return }
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(string, forType: .string)
}
}
private func installCommandArrowMonitor() { private func installCommandArrowMonitor() {
keyEventMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown) { [weak self] event in keyEventMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown) { [weak self] event in
guard let self else { return event } guard let self else { return event }