Here’s another cool iTerm 2 trick: you can directly affect the system-wide Find pasteboard using escape codes.
The reason I got excited about this is that I’m used to having any search I run in one place (with ⌘F) automatically populate in other apps via the universal find pasteboard. The most notable time that this doesn’t work is when the search I was running was on the command line using
ag, or the like. Obviously, right? But what if a
grep could set the search field in other apps?
The iTerm Escape Code
Among the many special escape codes that iTerm recognizes is the
CopyToClipboard command. This command takes any text output after it, up to an
EndCopy command, and applies it to the clipboard. You can use a named clipboard to affect the rule, find, or font clipboards (blank to affect general clipboard). In this case we’re targeting the “find” clipboard, so the command is
The Function (Fish)
So here’s my solution (for now). It’s not perfect as I can’t suppress the output and still have it work, so it just fades it to black before it outputs the text destined for the clipboard. This example is for
ag (silver searcher) in my Fish shell:
(I did the same for
ack, but got tripped up when I tried to do it for
grep. It caused errors with RVM that I wasn’t able to track down. That’s ok, I rarely use grep directly.)
Because the meat of this is just a printf/echo command with the escape sequence, this is easily adapted to other shells (see below for a bash/zsh version).
It simply takes the first argument from the command line and echos it through iTerm’s “CopyToClipboard” command, then runs the utility itself, in this case
command to skip any functions or aliases of the same name (like this current one, for example).
Now if I run
ag pandoc in a folder, “pandoc” shows up in my search field in iTerm so I can quickly ⌘G through the results, and when I switch over to my editor, it shows up there as soon as I hit ⌘F. Slick.
From the Top, With Bash Feeling
Here’s a Bash/Zsh version if you need it: