DEV Community

Filipe Herculano
Filipe Herculano

Posted on

Clipbar — Minimal macOS menu bar app for stashing clipboard content

From Larry Tesler to SourceNote to pbpaste to Clipbar

The recent death of Larry Tesler made me realize how much we take for granted our modern tooling and led me into spending an unusual amount of time reading about the invention of the copy & paste as we know today (even one of my favourite talks mentions Larry and his principles)

Thank you for your amazing contributions Larry!

Upon my findings, I came across an incredible app called SourceNote and I was astonished by how much I could relate to the problem it aims to solve — Feel free to stop reading this and watch their promo video, I thought it was such a simple elegant solution to a common occurrence in my workflow

Anyways, that made me want to try and approach that same problem with my own tools just because native access to the system clipboard is built in on most operating systems and I was feeling empathetic towards Larry's terrific invention

pbpaste

Note: pbpaste is a macOS command, if you're on linux try this command and if you are in Windows I think there is a clip command or you can try Cygwin with /dev/clipboard

First thing that came to my mind was — "I can write a bash script to dump everything into a txt file and then use that file for searching later"

So what does that look like?

date && pbpaste && echo "" >> clipboard.txt
Enter fullscreen mode Exit fullscreen mode

The date and the echo at the end is so you can facilitate some pattern for searching and browsing through the contents of the file as it grows indefinitely

Say you had "Hello World" in your clipboard, this is what you would get:

Thu 20 Feb 2020 20:20:20 EST
Hello World

Enter fullscreen mode Exit fullscreen mode

You can alias that command to something more convenient and run it whenever you want to stash your clipboard data to this file

And now you can search through that file with something like grep (or ripgrep, if you're like me)

Nice! Except ...

I'm not satisfied

Maybe that covers enough for some people, but I wasn't pleased with the solution, after using it for a bit I realized it just moved the problem to a different location

It solved having multiple "untitled" files open in my editor but it made a bit annoying to use and I noticed I kept going back to old habits

At this point my mind was thinking:

I like SourceNote but I don't want to reinvent it since it's already pretty solid, maybe I could just simplify my case if I looked for a pattern in my needs and solve for that instead

Less is more

The pattern I noticed was that I mostly cared about the previous occurrence of my clipboard and not necessarily the entire history

Countless time I thought I had the previous stuff in my clipboard only to see it was overwritten by some stuff later on

Another thing I wanted was a quick way of knowing what even is in my clipboard so I don't make the mistake of pasting the wrong thing (like being sloppy and sending my password in a text message to a friend instead of some link)

This would also avoid cluttering by keeping history of things that are no longer relevant indefinitely

I simply needed a short term stash for accessing the previous value kinda like how we need a temp variable to swap two values — although with destructing in ES6 you could just do

[a, b] = [b, a] // swap A and B
Enter fullscreen mode Exit fullscreen mode

Lastly, I wanted this to be minimal and automatic, I don't want to press another shortcut (kudos to SourceNote for the idea to reuse ⌘+C, it is brilliant)

Clipbar

After a few introductory tutorials on Swift and learning how to build OSX apps, I decided a Menu Bar app would be perfect for this

Clipbar Preview

It works by listening to the system's clipboard for changes and whenever there's a new entry it stashes the previous one

The UI displays a short preview of the current and previous values and gives you the option to swap them as well as clear the contents along with your clipboard value

There's definitely room for improvement (feel free to contribute) and it might even be useless for most people but it was fun

Anyway, you can find the code for it on GitHub and you can download the release from there if you don't wish to build it from source. 😁

Top comments (0)