Crates.io | tabular |
lib.rs | tabular |
version | 0.2.0 |
source | src |
created_at | 2018-09-18 18:47:18.7002 |
updated_at | 2022-01-08 21:49:43.55299 |
description | Plain text tables, aligned automatically |
homepage | |
repository | https://github.com/tabular-rs/tabular-rs |
max_upload_size | |
id | 85393 |
size | 57,421 |
Builds plain, automatically-aligned tables of monospaced text.
This is basically what you want if you are implementing ls
.
use tabular::{Table, Row};
use std::path::Path;
fn ls(dir: &Path) -> ::std::io::Result<()> {
let mut table = Table::new("{:>} {:<}{:<} {:<}");
for entry_result in ::std::fs::read_dir(dir)? {
let entry = entry_result?;
let metadata = entry.metadata()?;
table.add_row(Row::new()
.with_cell(metadata.len())
.with_cell(if metadata.permissions().readonly() {"r"} else {""})
.with_cell(if metadata.is_dir() {"d"} else {""})
.with_cell(entry.path().display()));
}
print!("{}", table);
Ok(())
}
ls(Path::new(&"target")).unwrap();
produces something like
1198 target/.rustc_info.json
1120 d target/doc
192 d target/package
1056 d target/debug
The Table::with_heading()
and Table::add_heading()
methods add
lines that span all columns.
The row!
macro builds a row with a fixed number of columns
using less syntax.
The Table::set_line_end()
method allows changing the line ending
to include a carriage return (or whatever you want).
With the ansi-cell
feature enabled, the Row::with_ansi_cell
and Row::add_ansi_cell
methods can be
used to add cells with ANSI color codes, and still have their widths be
computed correctly.
The Row::with_custom_width_cell
and Row::add_custom_width_cell
methods
can be used to customize alignment precisely.
It's on crates.io, so you can add
[dependencies]
tabular = "0.2.0"
to your Cargo.toml
.
unicode-width
: enabled by default; depends on the
unicode-width crate.
With the unicode-width
feature enabled, default alignment is based on [Unicode Standard Annex #11], with characters in the Ambiguous category considered to be 1 column wide.
Without it, default alignment is based on the count of the std::str::Chars
iterator.
ansi-cell
: disabled by default; depends on the strip-ansi-escapes crate. Provides the with_ansi_cell
and add_ansi_cell
methods.
The minimum supported Rust version (MSRV) of this crate is Rust 1.46.0. The MSRV may be bumped in a patch release.
You may also want:
text-tables – This is more automatic than tabular. You give it an array of arrays, it renders a nice table with borders. Tabular doesn't do borders.
prettytable — This has an API more similar to tabular’s in terms of building a table, but it does a lot more, including, color, borders, and CSV import.