//go:build darwin package clipboard import ( "fmt" "os/exec" "strings" ) type darwinClipboard struct{} // New creates a macOS clipboard (pbpaste/pbcopy). func New() (Clipboard, error) { return newDarwinClipboard() } func newDarwinClipboard() (*darwinClipboard, error) { // Verify pbpaste and pbcopy are available if err := checkBinary("pbpaste"); err != nil { return nil, fmt.Errorf("clip-sync: pbpaste not found: %w", err) } if err := checkBinary("pbcopy"); err != nil { return nil, fmt.Errorf("clip-sync: pbcopy not found: %w", err) } return &darwinClipboard{}, nil } func (c *darwinClipboard) Read() (string, error) { cmd := exec.Command("pbpaste") out, err := cmd.Output() if err != nil { return "", fmt.Errorf("clipboard read (pbpaste): %w", err) } return strings.TrimRight(string(out), "\n\r"), nil } func (c *darwinClipboard) Write(text string) error { cmd := exec.Command("pbcopy") cmd.Stdin = strings.NewReader(text) if err := cmd.Run(); err != nil { return fmt.Errorf("clipboard write (pbcopy): %w", err) } return nil }