Copy to Clipboard in IEx
Copying from the terminal is a common scenario for me. And macOS’ built-in pbcopy
command makes it very easy to do:
$ cat some-file.txt | pbcopy
But there isn’t something similar in Elixir that let’s you copy large terms easily.
I usually have to call inspect(term, limit: :infinity)
, manually select the printed
output and then copy it.
Fortunately, the Port
module in Elixir stdlib lets you work with external
commands and pipe data to them.
Copy Helper for Elixir
I have a common Helpers
module that I put in many of the .iex.exs
files in my
projects. These are automatically loaded whenever IEx starts. I have a copy/1
helper1 in
them as well:
defmodule Helpers do
def copy(term) do
text =
if is_binary(term) do
term
else
inspect(term, limit: :infinity, pretty: true)
end
port = Port.open({:spawn, "pbcopy"}, [])
true = Port.command(port, text)
true = Port.close(port)
:ok
end
end
Using it is straight-forward:
iex(1)> User |> Repo.get!(user_id) |> Helpers.copy
:ok
- The helper above is a simplified version of Khaja Minhajuddin’s post on the same topic which is focused on Linux instead.↩