Current section

Files

Jump to
io_ansi_plus lib io ansi plus ie.ex
Raw

lib/io/ansi/plus/ie.ex

defmodule IO.ANSI.Plus.IE do
alias IO.ANSI.Plus, as: ANSI
def list do
map =
:io_ansi_plus
|> Application.get_env(:color_codes)
|> Map.new(fn {name, code} -> {code, name} end)
blacks =
[7, 10, 11, 14, 15] ++
Enum.to_list(34..51) ++
Enum.to_list(70..87) ++
Enum.to_list(106..123) ++
Enum.to_list(142..159) ++
Enum.to_list(178..195) ++
Enum.to_list(214..231) ++ Enum.to_list(244..255)
IO.write("\n")
# Print 8 standard colors...
[:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white]
|> Enum.each(fn name ->
[
:"#{name}_background",
if(name == :white, do: :black, else: :light_white),
String.pad_trailing("#{inspect(name)}", 14 + 1)
]
|> ANSI.write()
end)
IO.write("\n")
# Print 8 "light" standard colors...
[:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white]
|> Enum.each(fn name ->
name = :"light_#{name}"
[
:"#{name}_background",
if(name in [:light_white, :light_yellow, :light_green, :light_cyan],
do: :black,
else: :light_white
),
String.pad_trailing("#{inspect(name)}", 14 + 1)
]
|> ANSI.write()
end)
IO.write("\n\n")
keyword =
for i <- 0..15 do
if map[i], do: {map[i], i}, else: {:"color#{i}", i}
end
keywords = Enum.chunk_every(keyword, 8)
# Print first 16 Xterm colors...
for keyword <- keywords do
Enum.each(keyword, fn {name, code} ->
[
:"#{name}_background",
if(code in blacks, do: :black, else: :light_white),
String.pad_trailing("#{inspect(name)} (#{code})", 14 + 1)
]
|> ANSI.write()
end)
IO.write("\n")
end
IO.write("\n")
keyword =
for i <- 16..255 do
# for i <- 16..96 do
if map[i], do: {map[i], i}, else: {:"color#{i}", i}
end
except = [
49,
165,
126,
184,
190,
107,
162,
19,
103,
147,
124,
168,
50,
80,
129,
204,
28,
130,
136,
42,
108,
97,
211,
56,
164,
69,
93,
225,
247
]
max =
keyword
|> Enum.map(fn {name, code} ->
if code in except do
"#{inspect(name)}" |> String.length()
else
"#{inspect(name)} (#{code})" |> String.length()
end
end)
|> Enum.max()
keywords = Enum.chunk_every(keyword, 6)
# Print next 240 Xterm colors...
for keyword <- keywords do
Enum.each(keyword, fn {name, code} ->
[
:"#{name}_background",
if(code in blacks, do: :black, else: :light_white),
if code in except do
String.pad_trailing("#{inspect(name)}", max + 1)
else
String.pad_trailing("#{inspect(name)} (#{code})", max + 1)
end
]
|> ANSI.write()
end)
IO.write("\n")
end
IO.write("\n")
:ok
end
end