From 565174c4b8c73e9e28524709060335a0b17ee3fb Mon Sep 17 00:00:00 2001 From: Grace Yoder Date: Mon, 29 Jun 2026 09:45:37 -0600 Subject: feat(NSPasteboard): added objective c bridge and build changes --- src/Clip/NSPBBridge.m | 12 ++++++++++++ src/Clip/NSPasteboard.zig | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/Clip/NSPBBridge.m create mode 100644 src/Clip/NSPasteboard.zig (limited to 'src/Clip') diff --git a/src/Clip/NSPBBridge.m b/src/Clip/NSPBBridge.m new file mode 100644 index 0000000..e736c3f --- /dev/null +++ b/src/Clip/NSPBBridge.m @@ -0,0 +1,12 @@ +// Simple bridge to objective_c code +// https://nathancraddock.com/blog/writing-to-the-clipboard-the-hard-way/ +#import +NSPasteboard *pboard; + +void initPB() { pboard = [NSPasteboard generalPasteboard]; } + +void sendPB(const char *text) { + [pboard clearContents]; + [pboard setString:[NSString stringWithUTF8String:text] + forType:NSPasteboardTypeString]; +} diff --git a/src/Clip/NSPasteboard.zig b/src/Clip/NSPasteboard.zig new file mode 100644 index 0000000..92c3403 --- /dev/null +++ b/src/Clip/NSPasteboard.zig @@ -0,0 +1,18 @@ +const std = @import("std"); + +extern fn sendPB(text: [*:0]const u8) void; +extern fn initPB() void; + +test "objc bridge" { + initPB(); + sendPB("test_string"); + + const result = try std.process.run(std.testing.allocator, std.testing.io, .{ + .argv = &.{"pbpaste"}, + }); + defer std.testing.allocator.free(result.stdout); + defer std.testing.allocator.free(result.stderr); + + try std.testing.expectEqualStrings("test_string", std.mem.trim(u8, result.stdout, "\n")); +} + -- cgit v1.3.1