Add OSC52 support
This commit is contained in:
Binary file not shown.
@@ -88,6 +88,7 @@ class TerminalSession: NSObject, ObservableObject, LocalProcessDelegate, @precon
|
||||
super.init()
|
||||
|
||||
terminalView.terminalDelegate = self
|
||||
installOsc52ClipboardHandler()
|
||||
|
||||
let font = NSFont.monospacedSystemFont(ofSize: fontSize, weight: .regular)
|
||||
terminalView.font = font
|
||||
@@ -153,6 +154,23 @@ class TerminalSession: NSObject, ObservableObject, LocalProcessDelegate, @precon
|
||||
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() {
|
||||
keyEventMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown) { [weak self] event in
|
||||
guard let self else { return event }
|
||||
|
||||
Reference in New Issue
Block a user