~sntx/bevy_term

Easy terminal event handling and rendering with Bevy!
docs: added repository url to the cargo workspace
docs: added semi-catchy description
feat!: changed crate name, multiple improvements & updated deps

clone

read-only
https://git.sr.ht/~sntx/bevy_term
read/write
git@git.sr.ht:~sntx/bevy_term

You can also use your local clone with git send-email.

#Bevy Term

Easy terminal event handling and rendering with Bevy!


bevy_term_counter screenshot

#Description

This crate primarily provides the TerminalPlugin for Bevy. It allows for easily rendering to the terminal and handling terminal events.

#Features

  • Work In Progress
  • ...

#Usage

Check out the examples directory!

Add the TerminalPlugin
fn main() -> AppExit {
    App::new()
        .add_plugins(TerminalPlugin)
        // ...
        .run()
}
Register a system for rendering to the terminal
fn main() -> AppExit {
    App::new()
        .add_systems(PostUpdate, render)
        // ...
        .run()
}

fn render(mut terminal: ResMut<Terminal>) {
    terminal
        .0
        .draw(|frame| {
            let chunks = Layout::default()
                .direction(Direction::Vertical)
                .constraints([Constraint::Percentage(49), Constraint::Min(1)].as_ref())
                .split(frame.area());

            frame.render_widget(
                Paragraph::new("Hellow World!\nPress `ESC` or `C-d` to exit.")
                    .alignment(Alignment::Center),
                chunks[1],
            );
        })
        .unwrap();
}
(Optional) Register a system for handling terminal events
fn main() -> AppExit {
    App::new()
        .add_systems(PreUpdate, handler)
        // ...
        .run()
}

fn handler(
    mut terminal_events: EventReader<bevy_term::Event>,
    mut tui_state: ResMut<bevy_term::State>,
) {
    for terminal_event in terminal_events.read() {
        if let Event::Key(key_event) = terminal_event.0 {
            if key_event.code == KeyCode::Esc {
                *tui_state = bevy_term::State::Exit
            }
        }
    }
}