#tui #color #console #no-std

no-std tooey

一个简单的无需 std 的终端显示库

12 个版本 (6 个重大更新)

0.7.2 2024年8月9日
0.7.1 2023年3月23日
0.7.1-readme2024年8月9日
0.6.0 2023年3月21日

#257命令行界面

Download history 46/week @ 2024-07-01 86/week @ 2024-07-29 177/week @ 2024-08-05

每月263次下载

MIT 许可证

42KB
453

Tooey 已被 Tuit 取代 Tuit

Tooey 是一个基础 TUI 库,但它有一些缺陷。Tuit 修复了这些错误。

适用于与 SprinklesOS 一起使用。

Tooey 仍处于初级阶段。随着我对 Tooey 的完善,请期待频繁(非常频繁,每日)的重大更改!

什么是 Tooey?

Tooey 是一个为 Sprinkles OS 个人使用编写的无需 std 的 TUI 库!

为什么是 Tooey?

我找不到任何无需 std 的 TUI 库,这让我很难过 :(

幸运的是,我现在找到了自己的快乐(通过编写 Tooey) :)

Tooey 架构

Tooey 中的每个 "小部件" 都是一个对象 -- 对象不能相互通信,但它们可以从中央控制器接收更新。

Tooey 中的渲染工作类似于层。

A diagram demonstrating how rendering is carried out by Tooey

每个层包含一个对象;该对象可以是空对象(不做任何事情),也可以是显示在屏幕中间文本的提示等对象。

虚拟终端不会自动重绘自己,除非它被更新或明确重绘。对象在初始化时不能自行绘制,直到发生重绘,因此建议在初始化后绘制您的对象(如果您喜欢看到它们的话 :))。

虚拟终端本身不处理显示其内容;它只是屏幕上字符的存储 -- 显示这些字符应由库用户处理;这使得库在运行时环境方面比其他替代方案更具灵活性,因为它不强制终端遵循任何特定标准才能运行,只要终端支持所需的最小功能即可。

这类似于 嵌入式图形 的方法,其中嵌入式图形不处理像素显示,只处理像素操作。

对象

对象类似于小部件;它们可以包含数据以帮助它们保存状态(例如,文本小部件中的字符串,或计数器中的数字)。

每个层都有一个这样的对象,它们的 on_draw 和 on_update 方法在屏幕绘制或发送更新时被调用。

TerminalObject 结构

on_update

on_update 函数在控制器每次调用终端的 .update() 时都会被调用。

该方法通过向对象的 on_update 方法传递一个 TerminalUpdate 枚举来通知事件。

on_update 方法本身接受三个参数;self、虚拟终端的字符和更新有效载荷。

然后,on_update 事件返回一个 LifecycleEvent 来指定对象接下来会发生什么。

/// Here's an example of what an on_update could look like!
fn prompt_on_update(
        &mut self,
        _screen: &mut Vec<Vec<CHARACTER>>,
        update_payload: &TerminalUpdate,
    ) -> LifecycleEvent {
        // Only die if the event was a keypress or mouseclick.
        match update_payload {
            TerminalUpdate::KeyboardEvent(_) | TerminalUpdate::MouseClick(_, _) => LifecycleEvent::Death,
            _ => LifecycleEvent::NoEvent
        }
    }

依赖项

~1.5MB
~28K SLoC