In today’s #ThursdayRTFM, we’ll look at two of my favorite macOS CLI tools, `pbcopy` and `pbpaste`. Why both? Because `man pbcopy` and `man pbpaste` launch the same manual page: together they “provide copying and pasting to the pasteboard (the Clipboard) from command line”.
The man page ends with a See Also referencing pages in “ADC Reference Library”: “Cocoa > Interapplication Communication > Copying and Pasting”. In theory it should still be online, just archived: https://developer.apple.com/library/archive/navigation/index.html In practice, this document is nowhere to be found.
Worse, when you go looking for docs in Apple’s *current* API docs, the result is… mixed. Hey, there’s a `Pasteboard` class! https://developer.apple.com/documentation/applicationservices/pasteboard/ Spoilers: there’s absolutely nothing there. It literally just has the declaration of the class itself. Otherwise: a blank page.
There *are* other docs (e.g. for Core Transferable), which is great, but those old docs had something Apple’s current approach does not—a way to understand not just the APIs but the system, including the operating system and its view of the world, the *why* behind the APIs.
Net, there’s no good way from the man page, and no easy way in Apple’s docs, to figure out what the other pasteboards besides `general` are for. Their names (`ruler`, `find`, and `font`) don’t tell me much, unfortunately!
Still, I learned something today, and I hope you did too.
`pbcopy` takes whatever is on standard input—whether you pipe it there or type it in—and puts it on “the specified pasteboard”, by default the “general” pasteboard. It copies as plain text by default, unless it’s Encapsulated PostScript (EPS) or Rich Text Format (RTF).
`pbpaste` pops whatever is on the specified pasteboard and puts it on standard output—if and only if the pasteboard has plain text, EPS, or RTF available. Otherwise, it’s “produces no output”.
I use these multiple times every day. It’s a super handy way of getting the contents of a file into my clipboard—if I don’t have the file open already in a text editor, I can `pbcopy < path/to/the-file` and then paste it (a chat, a Gist, a text editor, etc.) with OS shortcuts.