#用户输入 #TUI #输入 #终端 #屏幕 #框架 #控制台

console_engine

一个简单的终端框架,用于绘制事物和管理用户输入

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 命令行界面

Download history 75/week @ 2024-04-06 52/week @ 2024-04-13 82/week @ 2024-04-20 68/week @ 2024-04-27 48/week @ 2024-05-04 40/week @ 2024-05-11 64/week @ 2024-05-18 50/week @ 2024-05-25 75/week @ 2024-06-01 55/week @ 2024-06-08 53/week @ 2024-06-15 64/week @ 2024-06-22 26/week @ 2024-06-29 34/week @ 2024-07-06 44/week @ 2024-07-13 101/week @ 2024-07-20

213 次每月下载
用于 2 个 crate

MIT 许可证

160KB
3K SLoC

Console Engine

Crates.io docs.rs dependency status Crates.io Discussions Rust

Changelog

此库提供简单功能以处理终端应用程序的用户输入和显示
除了用户输入和显示之外,此库还提供了一些构建独立“屏幕”的工具,这些屏幕仅用于打印

它使用 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)
    }
}

文档

查看生成的文档。

示例

查看 示例

  • 拖放:使用鼠标移动矩形
  • 表情符号:在终端上显示表情符号
  • 事件:示例使用事件轮询方法
  • 表单选项:示例使用 CheckboxRadio 表单字段
  • 简单表单:示例创建和使用包含两个输入的 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