Gå til hovedinnhold

Kopier til clipboard fra iEX

Når en bruker iEX til debugging eller for å hente ut data kan det være kjekt å kunne kopiere noe direkte til clipboard fra iEX. Her viser vi deg hvordan du kan gjøre det.

19.6.2022 Skrevet av Kim Grytøyr

Mesteparten av backend-koden Devos forholder seg til er skrevet i Elixir, et funksjonelt programmeringsspråk som er basert på Erlang. Elixir har et veldig kjekt interaktivt shell (REPL) som heter iEX. Hvis du starter denne i et eksisterende prosjekt med kommandoen iex -S mix, så vil det åpnes et interaktivt shell hvor hele applikasjonen din er tilgjengelig.

Sett at vi hadde en applikasjon, MyApplication, som hadde mange transaksjoner, og vi trengte å hente ut en liste over alle ID-ene til disse transaksjonene.

iex(1)> MyApplication.Transactions.list_transactions()
[
  %Transaction{ id: 1, amount: 100.0 },
  %Transaction{ id: 2, amount: 150.0 }
]
iex(2)>

Denne funksjonen returnerer en liste med alle transaksjonene i. Det vi trenger er bare en liste med ID-ene i JSON-format, noe vi enkelt kan få til med følgende uttrykk:

iex(2)> MyApplication.Transactions.list_transactions
...(2)> |> Enum.map(&(&1.id))
...(2)> |> Jason.encode!
"[1,2]"

Dette er vel og bra, men i virkeligheten vil det typisk være langt flere enn to transaksjoner, og å kopiere resultatet kan noen ganger være vanskelig å få til på en fornuftig og ikke-frustrerende måte. Det er her denne lille modulen kommer inn i bildet:

# Denne koden plasseres i filen .iex.exs
# i rot-mappen til prosjektet ditt.

defmodule IEXHelpers 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

Når du nå starter iEX igjen kan du gjøre følgende:

iex(1)> MyApplication.Transactions.list_transactions
...(1)> |> Enum.map(&(&1.id))
...(1)> |> Jason.encode!
...(1)> |> IEXHelpers.copy

...og voilà! Du har hele listen over ID-ene i clipboardet ditt.

Merk: Denne kodesnutten er beregnet skrevet for bruk på en Mac. Hvis du bruker et annet operativsystem må den tilpasses noe, men på Unix-baserte operativsystem kan du stort sett bare bytte ut pbcopy med xclip på linje 13.

Denne funksjonen og inspirasjonen til denne artikkelen kom fra:

https://shyr.io/blog/iex-copy-to-clipboard