cursive 0.0.2

A TUI library based on ncurses-rs
Documentation
extern crate cursive;

use cursive::Cursive;

use cursive::view::{View, BoxView};
use cursive::printer::Printer;
use cursive::event::{EventResult, Event};

fn main() {
    let mut siv = Cursive::new();

    siv.add_layer(BoxView::new((30, 10), KeyCodeView::new(10)));

    siv.run();
}

struct KeyCodeView {
    history: Vec<String>,
    size: usize,
}

impl KeyCodeView {
    fn new(size: usize) -> Self {
        KeyCodeView {
            history: Vec::new(),
            size: size,
        }
    }
}

impl View for KeyCodeView {
    fn draw(&mut self, printer: &Printer) {
        for (y, line) in self.history.iter().enumerate() {
            printer.print((0, y), &line);
        }
    }

    fn on_event(&mut self, event: Event) -> EventResult {
        let line = match event {
            Event::CharEvent(c) => format!("Char: {}", c),
            Event::KeyEvent(key) => format!("Key: {}", key),
        };
        self.history.push(line);

        while self.history.len() > self.size {
            self.history.remove(0);
        }

        EventResult::Consumed(None)
    }
}