Arkham attempts to give a firm foundation for building TUI Apps. It does not provide a set of widgets or components that can be used. Instead, it tries to make the process of building terminal interfaces easy enough that they aren't necessary.
- Keyboard handling
- Terminal modification
- Full screen terminal UIs with alternate screen handling
- Full run loop and rendering engine
- Easy text formatting and styling
- Ergonomic component architecture
- Dependency injection
No lifetimes, structs, or traits.
fn my_component(ctx &mut ViewContext) {
ctx.insert((0,0), "Welcome");
}
Color and style display-able objects with a simple builder pattern.
fn my_component(ctx &mut ViewContext) {
ctx.insert(
(0,0),
"Welcome"
.to_runes()
.bg(Color::Blue)
.fg(Color::White),
);
}
Get access to application state, or arbitrary defined resources without having to keep track of and pass them into components.
fn root_component(ctx: &mut ViewContext) {
ctx.component(Rect::new((0,0), (10,10)), sub_component):
}
fn sub_component(ctx &mut ViewContext, user: Res<MyUser>) {
ctx.insert(
(0,0),
format!("Hello, {}", user.name),
);
}
Straight forward keyboard handling
fn my_component(ctx &mut ViewContext, kb: Res<Keyboard>) {
if kb.char() == Some('x') {
ctx.insert(
(0,0),
"X marks the spot"
);
}
}