4个版本 (破坏性更新)
0.6.0 | 2022年11月3日 |
---|---|
0.5.0 | 2022年8月10日 |
0.4.0 | 2022年7月24日 |
0.3.0 | 2022年7月7日 |
0.1.0 |
|
#16 in #终端窗口
13KB
209 行
winterm
一个用于在终端内创建像素化窗口的Rust库。
它使用 crossterm 作为后端。
演示
cargo run --example demo
文档
lib.rs
:
winterm
一个用于在终端内创建像素化窗口的Rust库。
它使用 [crossterm] 作为后端。
将 winterm 添加为依赖项
cargo add [email protected]
cargo add [email protected]
创建窗口
use winterm::Window;
let mut window = Window::new(height, width)?;
渲染下一帧
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()?;
响应用户操作
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
}
示例
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(())
}
调试
由于 winterm 使用终端的“替代屏幕”,因此使用打印函数进行调试可能会很复杂。
处理此问题的方法之一是使用 stderr(例如 dbg!
,eprintln!
等)并将其重定向到文件
cargo run 2> logs
现在您可以在执行后使用 cat logs
或者在另一个终端中 tail -f logs
来获取输出,同时代码仍在运行。
依赖项
~4–15MB
~130K SLoC