IO ANSI Table

Writes data to :stdio in a table with borders and colors. Can choose a table style to change the look of the table.

Inspired by the book Programming Elixir by Dave Thomas.

Installation

Add io_ansi_table to your list of dependencies in mix.exs:

def deps do
  [
    {:io_ansi_table, "~> 1.0"}
  ]
end

You may also define io_ansi_table as an included application, if only using the IO.ANSI.Table.write/3 function:

def application do
  [
    included_applications: [:io_ansi_table],
    extra_applications: [:logger]
  ]
end

Examples

alias IO.ANSI.Table

people = [
  %{name: "Mike", likes: "ski, arts", dob: "1992-04-15", bmi: 23.9},
  %{name: "Mary", likes: "travels"  , dob: "1992-04-15", bmi: 26.8},
  %{name: "Ann" , likes: "reading"  , dob: "1992-04-15", bmi: 24.7},
  %{name: "Ray" , likes: "cycling"  , dob: "1977-08-28", bmi: 19.1},
  %{name: "Bill", likes: "karate"   , dob: "1977-08-28", bmi: 18.1},
  %{name: "Joe" , likes: "boxing"   , dob: "1977-08-28", bmi: 20.8},
  %{name: "Jill", likes: "cooking"  , dob: "1976-09-28", bmi: 25.8}
]

Table.start([:name, :dob, :likes],
  header_fixes: %{~r[dob]i => "Date of Birth"},
  sort_specs: [asc: :dob],
  align_specs: [center: :dob],
  margins: [top: 2, bottom: 2, left: 2]
)

Table.format(people, style: :light)
Table.format(people, style: :light_alt)
Table.format(people, style: :light_mult)
Table.format(people, style: :cyan_alt)
Table.format(people, style: :cyan_mult)

light

light_alt

light_mult

cyan_alt

cyan_mult

Notes

For side-by-side tables, you can specify a negative top margin.

In addition to the 16 standard ANSI colors<sup>1</sup> and their background counterparts, this package also supports the 256 Xterm colors (foreground and background).

Most of these 256 colors were given names like:

For details, see file config/persist_colors.exs of dependency io_ansi_plus.

The following 2 packages use io_ansi_table as a dependency to tabulate data fetched from the web:

Invocation from a remote shell is now supported (courtesy of milkwine).

Sorting on Date columns or other struct types like Version is now supported.

1

Latest version

The latest version supports: