Skip to content

agatan/termfest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

234a147 · Jan 6, 2019
Jan 27, 2018
Jan 6, 2019
Jun 29, 2017
Jul 11, 2017
Jan 6, 2019
Jul 10, 2017
Jul 11, 2017

Repository files navigation

termfest

Build Status

termfest is a thread-safe TUI library that provides simple APIs to render texts in terminal, heavily inspired by nsf/termbox-go. Currently, termfest doesn't support windows because of my poor windows experience.

termfest has internal buffer for efficient rendering. Applications can render everything to the buffer every time, and termfest flushes the buffer and renders only the difference between the terminal state and the buffer.

use termfest::{Termfest, Event};
use termfest::attr::*;
use termfest::key::*;

// first, initialize termfest.
let (fest, events) = Termfest::hold().unwrap();

let mut y = 0;

// events is a receiver of a channel that accepts terminal events like key input.
for ev in events.iter() {
    {
        // lock the screen.
        let mut screen = fest.lock_screen();
        // clear the buffer. you can render everything every time.
        // termfest can provide efficient rendering.
        screen.clear();
        // write to the buffer.
        let attr = Attribute { fg: Color::Red, ..Attribute::default() };
        screen.print(0, y, "Hello, world!", attr);
        // when the screen lock is released, the buffer is flushed.
        // (you can flush the buffer with explicit `flush` call.)
    }
    match ev {
        Event::Key(ESC) | Event::Char('q') => break,
        Event::Key(ArrowUp) => if y > 0 { y -= 1; },
        Event::Key(ArrowDown) => y += 1,
        _ => {}
    }
}

See examples for more detail.

About

Easy TUI library written in Rust

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages