Crate tuikit

Source
Expand description

§Tuikit

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

  • Thread safe.
  • Support non-fullscreen mode as well as fullscreen mode.
  • Support Alt keys, mouse events, etc.
  • Buffering for efficient rendering.

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:

[dependencies]
tuikit = "*"

Here is an example:

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

fn main() {
    let term: 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();
    }
}

Modules§

attr
attr modules defines the attributes(colors, effects) of a terminal cell
canvas
cell
draw
error
event
events a Term could return
input
module to handle keystrokes
key
Defines all the keys tuikit recognizes.
output
Output is the output stream that deals with ANSI Escape codes. normally you should not use it directly.
prelude
raw
Managing raw mode.
screen
Buffering screen cells and try to optimize rendering contents
term
Term is a thread-safe “terminal”.
widget

Macros§

ok_or_return
some_or_return

Type Aliases§

Result