39 个版本 (24 个稳定版本)
2.6.1 | 2023年12月10日 |
---|---|
2.6.0 | 2023年4月6日 |
2.5.1 | 2023年2月17日 |
2.5.0 | 2022年8月8日 |
0.7.0 | 2020年5月22日 |
#77 in 命令行界面
213 次每月下载
用于 2 个 crate
160KB
3K SLoC
Console Engine
此库提供简单功能以处理终端应用程序的用户输入和显示
除了用户输入和显示之外,此库还提供了一些构建独立“屏幕”的工具,这些屏幕仅用于打印
它使用 Crossterm 作为处理屏幕和输入的主要工具。您无需担心初始化任何内容,因为库将为您处理
摘要
功能
- 使用形状或文本构建自定义终端显示
- 以每秒一个目标帧率处理终端
- 支持键盘和鼠标
- 支持终端尺寸调整
- 您对键盘/鼠标处理不感兴趣?您仍然可以构建仅打印内容的“屏幕”
- 将屏幕嵌入到另一个屏幕中
- 使用功能
event
- 管理输入的到达
- 使用功能
form
- 构建具有一组输入(文本、复选框等)的自管理表单
- 使用一组验证约束来验证每个输入
平台
由于使用 crossterm
,因此应在 Windows、Linux 和 Mac 上工作(请参阅 Crossterm 页面上的测试终端)
示例用法
ConsoleEngine (管理输入和输出)
use console_engine::pixel;
use console_engine::Color;
use console_engine::KeyCode;
fn main() {
// initializes a screen of 20x10 characters with a target of 3 frames per second
// coordinates will range from [0,0] to [19,9]
let mut engine = console_engine::ConsoleEngine::init(20, 10, 3).unwrap();
let value = 14;
// main loop, be aware that you'll have to break it because ctrl+C is captured
loop {
engine.wait_frame(); // wait for next frame + capture inputs
engine.clear_screen(); // reset the screen
engine.line(0, 0, 19, 9, pixel::pxl('#')); // draw a line of '#' from [0,0] to [19,9]
engine.print(0, 4, format!("Result: {}", value).as_str()); // prints some value at [0,4]
engine.set_pxl(4, 0, pixel::pxl_fg('O', Color::Cyan)); // write a majestic cyan 'O' at [4,0]
if engine.is_key_pressed(KeyCode::Char('q')) { // if the user presses 'q' :
break; // exits app
}
engine.draw(); // draw the screen
}
}
屏幕 (生成输出)
use console_engine::screen::Screen;
use console_engine::pixel;
fn main() {
// create a screen of 20x11 characters
let mut scr = Screen::new(20,11);
// draw some shapes and prints some text
scr.rect(0,0, 19,10,pixel::pxl('#'));
scr.fill_circle(5,5, 3, pixel::pxl('*'));
scr.print(11,4, "Hello,");
scr.print(11,5, "World!");
// print the screen to the terminal
scr.draw();
}
事件 (具有 event
功能)
(请参阅完整的源代码实现示例)
loop {
// Poll next event
match engine.poll() {
// A frame has passed
Event::Frame => {/* ... */}
// A Key has been pressed
Event::Key(keyevent) => {/* ... */}
// Mouse has been moved or clicked
Event::Mouse(mouseevent) => {/* ... */}
// Window has been resized
Event::Resize(w, h) => {/* ... */}
}
}
表单 (具有 form
功能)
(请参阅完整的源代码实现示例)
// Define a theme for the form
let theme = FormStyle {
border: Some(BorderStyle::new_light()),
..Default::default()
};
// Create a new Form
let mut form = Form::new(
12,
6,
FormOptions {
style: theme,
..Default::default()
},
);
form.build_field::<Text>(
"username",
FormOptions {
style: theme,
label: Some("Username"),
..Default::default()
},
);
form.build_field::<HiddenText>(
"password",
FormOptions {
style: theme,
label: Some("Password"),
..Default::default()
},
);
/* ... */
while !form.is_finished() {
match engine.poll() {
/* ... */
event => form.handle_event(event)
}
}
文档
查看生成的文档。
示例
查看 示例。
- 拖放:使用鼠标移动矩形
- 表情符号:在终端上显示表情符号
- 事件:示例使用事件轮询方法
- 表单选项:示例使用
Checkbox
和Radio
表单字段 - 简单表单:示例创建和使用包含两个输入的
Form
- 文本表单:示例使用
Text
表单字段 - 表单验证:示例使用表单验证
- 图形:显示使用某些值生成的图形。
- 线条:在屏幕上绘制随机颜色和随机线条。
- 线条-FPS:与“线条”相同的示例,但带有FPS计数器。
- 鼠标:简单的鼠标点击测试
- 屏幕嵌入:示例使用Screen的
print_screen
函数将一个屏幕嵌入到另一个屏幕中 - 屏幕提取:示例使用Screen的
extract
函数提取屏幕的一部分 - 简单屏幕:示例使用Screen结构而不是ConsoleEngine
- 屏幕交换:在几个Screen结构之间交换
- 滚动:
scroll
函数的示例 - 平滑滚动:平滑滚动的示例(截至crossterm 0.26.1仅限Windows)
- 形状:形状功能的测试工具
- 蛇:一个简单的蛇游戏。
- 样式矩形:
rect_border
函数的示例 - 俄罗斯方块:一个俄罗斯方块游戏
媒体
可靠性
建议始终使用 cargo-crev 来验证每个依赖项的可信度,包括这个依赖项。
依赖项
~2–13MB
~87K SLoC