3 releases
0.2.2 | Oct 18, 2024 |
---|---|
0.2.1 | Oct 17, 2024 |
0.2.0 | Oct 14, 2024 |
#11 in #text-based
450 downloads per month
Used in 2 crates
66KB
1.5K
SLoC
Table of Contents
Dreg
A simple text-based user interface library that will run on just about anything.
Examples
Terminal
use dreg::prelude::*;
fn main() -> Result<()> {
let program = MyProgram {
should_quit: false,
};
let platform = CrosstermPlatform::new()?;
run_program(program, platform)?;
Ok(())
}
struct MyProgram {
should_quit: bool,
}
impl Program for MyProgram {
fn update(&mut self, frame: Frame) {
// When the user pressed `q`, the program safely exits.
if frame.context.keys_down().contains(&Scancode::Q) {
self.should_quit = true;
return; // No need to render anything past this point.
}
frame.buffer.set_string(
1, // Column index.
1, // Row index.
format!("KEYS DOWN: {:?}", frame.context.keys_down()),
Style::new(), // No styling.
);
}
fn should_exit(&self) -> bool {
self.should_quit
}
}
Overview
Design Philosophy
The design of Dreg has been radical simplicity from the very start.
Features
- Runs on anything[^1].
Limitations
- No support for variable width fonts; even on platforms that do support them.
Acknowledgments
License
[^1]: It's not gonna run on your toaster, but it might run on your smart fridge.
lib.rs
:
Dreg Core Functionality
Dependencies
~2.5MB
~36K SLoC