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


Keywords
borders, colors, elixir, stdout, table
License
MIT

Documentation

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 colors1 and their background counterparts, this package also supports the 256 Xterm colors (foreground and background).

Most of these 256 colors were given names like:

  • :aqua
  • :chartreuse
  • :psychedelic_purple

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 Actually 8 colors and their "bright" variants.

Latest version

The latest version supports:

  • sorting on multiple columns
  • alternating row attributes
  • alignment of column elements
  • sort direction indicators
  • negative top margin
  • ANSI and Xterm colors
  • invocation from remote shell
  • sorting on Date columns