4 releases (breaking)
0.6.0 | Nov 3, 2022 |
---|---|
0.5.0 | Aug 10, 2022 |
0.4.0 | Jul 24, 2022 |
0.3.0 | Jul 7, 2022 |
0.1.0 |
|
#17 in #terminal-window
13KB
209 lines
winterm
A Rust library to create a pixelated window inside a terminal.
It uses crossterm as a backend.
Demo
cargo run --example demo
Documentation
lib.rs
:
winterm
A Rust library to create a pixelated window inside a terminal.
It uses [crossterm] as a backend.
Adding winterm as a dependency
cargo add winterm@0.6.0
cargo add crossterm@0.25.0
Create a window
use winterm::Window;
let mut window = Window::new(height, width)?;
Render the next frame
use crossterm::style::Color;
window.set_pixel(0, 0, Color::Red);
window.set_pixel(
y,
x,
Color::Rgb {
r: 0x3E,
g: 0xB4,
b: 0x89,
},
);
window.redraw()?;
React to events
use crossterm::event::KeyCode;
window.poll_events()?;
if window.get_key(KeyCode::Esc) {
// the Escape key has been pressed
}
if window.get_key(KeyCode::Char('w')) {
// the W key has been pressed
}
Example
use crossterm::{event::KeyCode, style::Color, Result};
use winterm::Window;
fn main() -> Result<()> {
let mut window = Window::new(9, 16)?;
let mut color = Color::Black;
loop {
window.poll_events()?;
if window.get_key(KeyCode::Esc) {
break;
}
if window.get_key(KeyCode::Char('n')) {
color = match color {
Color::Black => Color::Red,
Color::Red => Color::Rgb {
r: 0x3E,
g: 0xB4,
b: 0x89,
},
_ => Color::Black,
}
}
for y in 0..window.height() {
for x in 0..window.width() {
window.set_pixel(y, x, color);
}
}
window.redraw()?;
}
Ok(())
}
Debugging
Since winterm uses the terminal "alternate screen", it can be complicated to debug using the print functions.
One way to deal with this problem is to use stderr (e.g. dbg!
, eprintln!
, ...) and redirect it to a file :
cargo run 2> logs
You can now use cat logs
after execution or tail -f logs
in another terminal to get your output while the code is still running.
Dependencies
~4–15MB
~130K SLoC