Crate termint

source ·
Expand description

§termint

Rust library for colored printing and Terminal User Interfaces

§Installation:

This library is available on crates.io. You can add it to your projects using cargo:

cargo add termint

§Basic example:

Printing colored text is really easy, you can do it like this:

println!("{}", "Cyan text".fg(Fg::Cyan));
println!("{}", "Cyan text on white background".fg(Fg::Cyan).bg(Bg::White));
println!("{}", "Bold red text".fg(Fg::Red).modifier(vec![Modifier::Bold]));
println!("{}", "Text with RGB value".fg(Fg::RGB(0, 249, 210)));

image

You can see all the colors and modifiers in the documentation.

§Advanced example:

You can also create TUIs using this library. This example shows how you can use Block widget and add children to it and creating Layout:

// Creates main block and sets its properties
let mut main = Block::new()
    .title("Termint".to_span())
    .direction(Direction::Horizontal)
    .border_type(BorderType::Double);

/// Creates block1 and adds span as its child
let mut block1 = Block::new().title("Sub block".to_span());
let span1 = "I like it!".fg(Fg::Green).bg(Bg::Yellow);
block1.add_child(span1, Constrain::Percent(100));
/// Adds block1 as child of main block
main.add_child(block1, Constrain::Min(0));

/// Create block2 and adds span as its child
let mut block2 = Block::new().title("Another".to_span());
let span2 = "This is really cool, right?".fg(Fg::Blue);
block2.add_child(span2, Constrain::Percent(100));
/// Adds block2 as child of main block
main.add_child(block2, Constrain::Fill);

/// Renders the main block which renders all the children
main.render(&Coords::new(1, 1), &Coords::new(30, 8));

image

§Usage:

Code blocks above are just examples of the usage. To see more about functions, Widgets and more, please visit the documentation.

§Technologies

Obviously this library was created in Rust, but I also used library called term-size to get terminal size.

Modules§

  • Contains enums for foreground, background and more
  • Contains structs for geometry, such as Coords
  • Contains useful macros
  • Contains Term struct
  • Contains widgets (Layout, Block, Span) widgets is collection of types that implement Widget trait

Macros§

  • Macro to combine [Border] sides
  • Makes creating help easier
  • Creates vector with given given Modifiers
  • Creates new paragraph in more simple way