Jump to content

Merge last "N" number of clipboards

Recommended Posts

I'm trying to make a workflow that accepts a single parameter "N" (a number) and then uses that to merge the last N clipboards, and paste that to the frontmost app. Let's call it "clipmerge" and it uses keyword `cm`.


e.g. "cm9" would take {clipboard:0} {clipboard:1} ... {clipboard:8} and merge them.


Anyone got any ideas on how to achieve this?


edit: I figured out my own solution... click here

Edited by luckman212

Share this post

Link to post

Figured out a way - not sure if it's the "right" way but, it works well enough.
I used a couple of bash scripts to validate/filter the input as well as loop & process the output.


If you want to have a look... 

(link removed, scroll down for the new version)



Edited by luckman212

Share this post

Link to post

Nicely done, this makes the clipboard a lot more useful! I noticed that if I only have two clips in the clipboard and execute cm3 (more than I have), it messes up the clips, if you want to do some touching up. It's good as it is though.

Share this post

Link to post

Well, that was a long & winding road. I'm new to Alfred so I'm still figuring things out. I tried everything I could to avoid using a /tmp file but this was the only way that worked. Everything else—using variables, trying to process the clipboard buffers from within the workflow itself, using external triggers etc, all failed.


This seems to be due to the way Alfred processes the query buffer as it passes through the workflow. Internally, a reference like `{clipboard:11}` will always return that exact text (e.g. if used in a comparison statement from bash or python) -- it only converts it to the actual clipboard value during OUTPUT actions such as Large Type or Write Text File. The 2nd problem is, if `{clipboard:11}` contains a NULL (empty) value, instead of returning BLANK (which would be expected), Alfred insists on instead outputting the dynamic placeholder itself. So, if you have only 5 clips and you ask for 10 to be merged, the last 5 will be written out as just `{clipboard:6}, {clipboard:7}...` etc.


TL;DR I could not find a reliable way to test for "empty" values and omit them from the output other than using Write Text File and then processing it with sed. This works fine though, and the script cleans up the /tmp file after itself and is pretty quick about it.


If anyone knows a better way I'm all ears. But I think this is something that would have to be fixed in Alfred itself.


Here's the new version:



  • omits empty strings from output if you request > clips than exist in the history
  • configurable MIN_CLIPS and MAX_CLIPS variables
  • added notifications for success/failure



Share this post

Link to post

Join the conversation


Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.


×   Your previous content has been restored.   Clear editor


  • Create New...