14 releases (7 stable)

1.3.2 Sep 27, 2021
1.3.1 Feb 3, 2021
1.3.0 Apr 29, 2020
1.2.0 Oct 27, 2019
0.1.5 Jul 14, 2018

#91 in Command-line interface

Download history 3668/week @ 2023-12-15 2553/week @ 2023-12-22 2676/week @ 2023-12-29 3692/week @ 2024-01-05 4154/week @ 2024-01-12 3957/week @ 2024-01-19 4076/week @ 2024-01-26 4522/week @ 2024-02-02 3673/week @ 2024-02-09 4392/week @ 2024-02-16 3959/week @ 2024-02-23 3652/week @ 2024-03-01 3919/week @ 2024-03-08 4213/week @ 2024-03-15 4045/week @ 2024-03-22 3641/week @ 2024-03-29

16,428 downloads per month
Used in 48 crates (41 directly)

MIT license

82KB
1K SLoC

term-table

CLI Tables Made Easy

Example

let mut table = Table::new();
table.max_column_width = 40;

table.style = TableStyle::extended(); 

table.add_row(Row::new(vec![
    TableCell::new_with_alignment("This is some centered text", 2, Alignment::Center)
])); 

table.add_row(Row::new(vec![
    TableCell::new("This is left aligned text", 1),
    TableCell::new_with_alignment("This is right aligned text", 1, Alignment::Right)
]));

table.add_row(Row::new(vec![
    TableCell::new("This is left aligned text", 1),
    TableCell::new_with_alignment("This is right aligned text", 1, Alignment::Right)
]));

table.add_row(Row::new(vec![
    TableCell::new("This is some really really really really really really really really really that is going to wrap to the next line", 2),
]));   

println!("{}", table.render());

Here's the result

extended style

Using TableBuilder

let table = TableBuilder::new().style(TableStyle::extended()).rows(
        vec![
            Row::new(vec![
                TableCell::new_with_alignment("This is some centered text", 2, Alignment::Center)
            ]),
            Row::new(vec![
                TableCell::new("This is left aligned text"),
                TableCell::new_with_alignment("This is right aligned text", 1, Alignment::Right)
            ]),
            Row::new(vec![
                TableCell::new("This is left aligned text"),
                TableCell::new_with_alignment("This is right aligned text", 1, Alignment::Right)
            ]),
                Row::new(vec![
                TableCell::new_with_col_span("This is some really really really really really really really really really that is going to wrap to the next line", 2),
            ]),
        ]
    ).build();

println!("{}", table.render());

Table Styles

It is possible to define your own table styles by creating a new instance of TableStyle

This is what the extend table style implementation looks like. This is the default style in term-table-rs

pub fn extended() -> TableStyle {
    return TableStyle {
        top_left_corner: '',
        top_right_corner: '',
        bottom_left_corner: '',
        bottom_right_corner: '',
        outer_left_vertical: '',
        outer_right_vertical: '',
        outer_bottom_horizontal: '',
        outer_top_horizontal: '',
        intersection: '',
        vertical: '',
        horizontal: '',
    };
}

TableStyle also implements a simple() table style function and a blank() table style function

Those styles looks like this

Blank

blank style

Simple

simple style

Column Widths

It is possible to control the maximum width of table columns. The max_column_width property of Table can be set to restrict the width of all TableCells. The set_max_column_width function of Table can be used to set the max width of a specific column. The set_max_column_widths function provides the ability to set the width of multiple columns by passing in a Vec of tuples containing an index and width.

Disabling Row Separators

There are a few different options for disabling row separation.

Table has three flags for controlling row separation:

  1. separate_rows dictates whether rows are separated within the table

    separate_rows

  2. has_top_boarder dictates whether or not the table has a top border

    has_top_boarder

  3. has_bottom_boarder dictates whether or not the table has a bottom border

    has_bottom_boarder

Separators can also be controlled per row by setting the has_separator flag on Row

has_separator

Dependencies

~2.2–3MB
~54K SLoC