mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-04-22 01:18:36 +03:00
40 lines
1.3 KiB
Swift
40 lines
1.3 KiB
Swift
import AppKit
|
|
import GhosttyKit
|
|
|
|
extension NSPasteboard {
|
|
/// The pasteboard to used for Ghostty selection.
|
|
static var ghosttySelection: NSPasteboard = {
|
|
NSPasteboard(name: .init("com.mitchellh.ghostty.selection"))
|
|
}()
|
|
|
|
/// Gets the contents of the pasteboard as a string following a specific set of semantics.
|
|
/// Does these things in order:
|
|
/// - Tries to get the absolute filesystem path of the file in the pasteboard if there is one and ensures the file path is properly escaped.
|
|
/// - Tries to get any string from the pasteboard.
|
|
/// If all of the above fail, returns None.
|
|
func getOpinionatedStringContents() -> String? {
|
|
if let urls = readObjects(forClasses: [NSURL.self]) as? [URL],
|
|
urls.count > 0 {
|
|
return urls
|
|
.map { $0.isFileURL ? Ghostty.Shell.escape($0.path) : $0.absoluteString }
|
|
.joined(separator: " ")
|
|
}
|
|
|
|
return self.string(forType: .string)
|
|
}
|
|
|
|
/// The pasteboard for the Ghostty enum type.
|
|
static func ghostty(_ clipboard: ghostty_clipboard_e) -> NSPasteboard? {
|
|
switch (clipboard) {
|
|
case GHOSTTY_CLIPBOARD_STANDARD:
|
|
return Self.general
|
|
|
|
case GHOSTTY_CLIPBOARD_SELECTION:
|
|
return Self.ghosttySelection
|
|
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
}
|