#tui #用户界面 #鼠标事件 #文本编辑器 #体验 #终端

sanguine

一个用于在 Rust 中创建动态 TUI 体验的库

8 个版本

0.3.1 2023 年 5 月 22 日
0.3.0 2023 年 5 月 22 日
0.2.0 2023 年 5 月 19 日
0.1.1 2023 年 5 月 19 日
0.1.0-dev-r22023 年 4 月 14 日

#709 in GUI

Download history 2/week @ 2024-03-28 1/week @ 2024-04-04

88 每月下载量

MIT 许可证

95KB
2.5K SLoC

sanguine

在 Rust 中创建动态、高性能的 TUI 应用程序。

Sanguine 诞生于对适用于 复杂 TUI 应用程序(如文本编辑器和终端多路复用器)的库的需求。Rust 生态系统中有许多用于构建 TUI 应用的优秀 crate,但许多都针对小型仪表盘式应用,并实现即时模式渲染或难以处理鼠标事件。

Sanguine 实现了一个基于树的布局 API,该 API 可在运行时更新,并针对终端渲染设计了一个自定义约束算法。布局结果在渲染之间进行缓存以提高性能,并且仅在布局更改时重新计算。小部件可以嵌套,并且可以正确处理任何深度的小部件的鼠标事件 - 小部件只需根据本地位置处理鼠标事件。小部件可以可选地指定光标位置,以便实现文本编辑器窗口等。

它建立在 TermwizBufferedTerminal 之上,该功能优化了终端写入以提高性能。

功能

  • 动态、基于树的布局 API
  • 可扩展的小部件特质
  • 一等鼠标事件支持
    • 自动传播
    • 悬停和点击支持
  • 全局和小部件本地事件处理器
  • 泛型 API
    • 用于消息传递的自定义用户事件类型
    • 用于核心应用程序状态的自定义状态类型
  • 焦点
    • 通过方向或直接切换焦点

演示

demo

演示用法

$ git clone [email protected]:willothy/sanguine.git

$ cd sanguine

$ cargo run --example demo

快捷键

  • Control + q: 退出
  • Shift + Tab: 循环焦点
  • Shift + 上/下/左/右: 通过方向切换焦点
  • 上/下/左/右: 切换菜单项
  • Enter: 选择菜单项

依赖关系

~16–27MB
~472K SLoC