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 modules defines the attributes(colors, effects) of a terminal cell
events a Term could return
module to handle keystrokes
Defines all the keys tuikit recognizes.
Output is the output stream that deals with ANSI Escape codes. normally you should not use it directly.
Managing raw mode.
Buffering screen cells and try to optimize rendering contents
Term is a thread-safe “terminal”.

Macros

Type Definitions