Crates.io

Tuikit

Tuikit is a TUI library for writing terminal UI applications. Highlights:

Tuikit is modeld after termbox which views the terminal as a table of fixed-size cells and input being a stream of structured messages.

Usage

In your Cargo.toml add the following:

toml [dependencies] tuikit = "*"

And if you'd like to use the latest snapshot version:

toml [dependencies] tuikit = { git = "https://github.com/lotabout/tuikit.git" }

Here is an example (could also be run by cargo run --example hello-world):

```rust use tuikit::attr::*; use tuikit::term::{Term, TermHeight}; use tuikit::key::Key; use tuikit::event::Event; use std::cmp::{min, max};

fn main() { let term = Term::with_height(TermHeight::Percent(30)).unwrap(); let mut row = 1; let mut col = 0;

let _ = term.print(0, 0, "press arrow key to move the text, (q) to quit");
let _ = term.present();

while let Ok(ev) = term.poll_event() {
    let _ = term.clear();
    let _ = term.print(0, 0, "press arrow key to move the text, (q) to quit");

    let (width, height) = term.term_size().unwrap();
    match ev {
        Event::Key(Key::ESC) | Event::Key(Key::Char('q')) => break,
        Event::Key(Key::Up) => row = max(row-1, 1),
        Event::Key(Key::Down) => row = min(row+1, height-1),
        Event::Key(Key::Left) => col = max(col, 1)-1,
        Event::Key(Key::Right) => col = min(col+1, width-1),
        _ => {}
    }

    let attr = Attr{ fg: Color::RED, ..Attr::default() };
    let _ = term.print_with_attr(row, col, "Hello World! 你好!今日は。", attr);
    let _ = term.set_cursor(row, col);
    let _ = term.present();
}

} ```

Future Plans

Goal: - "Layout System". Something like the CSS "flexbox" for managing layouts of TUI applications.

Not Goal: - Windows support due to my lack of windows experience. - TUI Widges.

References

Tuikit borrows ideas from lots of other projects: