#终端 #tui #无分配 #ansi #颜色

无标准库 tuix

一个无标准库、无分配的 TUI 库

5 个版本 (3 个重大更新)

0.3.0-a2+checkboxes2024 年 8 月 18 日
0.2.2-shelves2024 年 8 月 11 日
0.1.1 2024 年 8 月 9 日
0.0.1 2024 年 7 月 28 日
0.0.0 2023 年 4 月 9 日

#153命令行界面

Download history 108/week @ 2024-07-25 15/week @ 2024-08-01 437/week @ 2024-08-08 172/week @ 2024-08-15

每月 732 次下载

GPL-3.0+

180KB
3K SLoC

tuix(发音为 To-It,或 Toy-t)

注意:tuix 是一个 W.I.P。

  • 尽管库的主体已经存在且文档编写良好,但 tuix 真正缺少的是一些更多的控件!

  • 还需要更多的测试!

  • 目前,存在几个布局控件,如 StackedCenteredMargin。有关更多信息,请参阅 文档

  • 还有一个 Buttons 控件和一个 Text 控件。有关更多信息,请参阅 文档

  • 当前许可证为 GPL-3.0+ — 这是因为从 GPL-3 到更宽松的许可证要容易得多,但反之则不然。在可预见的未来,我将在 GPL-3.0+ 许可证下发布未来的版本,但我对建议持开放态度。

  • 如果您有任何疑问,可以打开一个 问题

为无标准库、无分配的 Rust 用户提供的 TUI 库!

tuix 不提供一组完整的工具来处理终端。它可以被认为是 MVC 架构中的 '视图' 组件,因为它只处理终端对象的显示。然而,它不会为您处理诸如输入、绘制顺序或其他应用程序状态等问题 — 主要因为这些事情太过于实现特定。

这意味着,尽管终端对象可能具有处理自身状态的良好功能,但您才是程序逻辑的最终控制者。

虚拟终端

tuix 的基础是一个对终端的抽象;虚拟终端。

虚拟终端是实现 tuit::terminal::Terminal 的任何东西,并且有一些选项既可以避免又可以使用分配(请注意,alloc 功能对于某些动态调整大小的终端是必需的,但还有一个不分配的 MaxSize 可以无限扩展到指定的参数)。

想法搁置

  • 按照 tuit 的制作方式,您可以将 BoundingBox 小部件组合起来创建完整的布局。

  • ...那么,如果您能够创建一个将这些小部件串联起来的 TUI 应用程序会怎么样呢?

  • ...以 Unix 风格的方式,允许您创建一个由小部件组成的 TUI 应用程序,然后您可以将它作为一个命令行程序运行。

  • 我正式称之为 "wedge"(楔子)

wedge text "Hello, world!"
| wedge above
$(wedge button "Button 1")
| wedge center

肯定没有人之前想过这个,对吧?

这个启示突然出现在我的脑海中,我不得不把它写下来。

MSRV 政策

当前最低要求版本:Rust Stable 1.80

我的个人建议是坚持使用最新的稳定版。直到最近,这个库基于 nightly 版本,因为一些需要的功能缺失--然而,截至撰写 Rust 1.80 时,它们都已经可用,所以我可以转向稳定版。

依赖项

~0.4–1.4MB
~29K SLoC