Crate tuikit[][src]

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

unwrap_or_return

Type Definitions

Result