内容提要
Ratatui 0.21.0 发布,是 tui-rs 的社区延续版本。新增 termwiz 后端、日历与圆形组件、内联视口、Block 底部标题与内边距、文本掩码、border! 宏、颜色字符串转换,并将 Spans 更名为 Line。最低 Rust 版本 1.65.0,提供迁移指南,欢迎社区贡献。
延伸解读
从 tui-rs 到 ratatui:社区接棒的背景
文章回顾了 ratatui 的由来:原 tui-rs 作者在 2022 年发起讨论后,社区于 2023 年初创建 Discord 并最终 fork 项目,首个版本 0.20.0 于 3 月发布。这段历程说明 ratatui 并非全新项目,而是 tui-rs 的延续,因此已有 tui-rs 经验的开发者可以较快上手,但需注意后续版本可能引入不兼容变更。
新后端 termwiz 与可选依赖的设计
0.21.0 新增 termwiz 后端,该后端由 wezterm 使用的 crate 提供。启用时需要关闭默认特性并显式开启 termwiz 特性,这体现了 ratatui 通过特性门控控制依赖的策略。类似地,日历组件依赖 time crate,也被放在 widget-calendar 特性后,避免为不需要的用户引入额外依赖。
内联视口:终端内嵌区域的新能力
内联视口是社区高度请求的功能,允许在终端窗口中划出一块矩形区域显示内容,文章提到有示例模拟并行下载多个文件。该功能最初由原作者实现,后由 Atuin 团队完成。对于需要在终端中嵌入动态进度或局部刷新的应用,这提供了比全屏 TUI 更灵活的交互方式。
迁移注意:Spans 更名与最低 Rust 版本
本次将 Spans 重命名为 Line,并添加了弃用通知,原因是复数形式容易引起混淆,且该类型实际表示由多个 span 组成的一行文本。同时最低支持的 Rust 版本提升至 1.65.0。从 tui-rs 迁移的开发者应参考官方迁移指南,并留意这些命名和工具链要求的变化。
Q&A
Ratatui 和原来的 tui-rs 是什么关系?
Ratatui 是 tui-rs 的社区延续版本。原 tui-rs 作者在 2022 年发起讨论后,社区于 2023 年 2 月创建分支继续开发,并于 3 月发布首个版本 0.20.0。
Ratatui 0.21.0 新增了哪些后端支持?
新增了 termwiz 后端,它是支持 wezterm 的终端库。需要在 Cargo.toml 中启用 termwiz feature,并使用 TermwizBackend 创建终端。
如何在 Ratatui 中使用日历组件?
日历组件需要启用 widget-calendar feature,因为它依赖 time crate。使用 Monthly::new 创建,并可设置显示星期头、月份头等。
Ratatui 的 Block 现在支持哪些新功能?
Block 现在支持将标题放在底部(title_on_bottom),以及添加内边距(padding),方便在 Block 内渲染内容时控制边距。
如何用 Ratatui 掩码显示敏感文本?
使用 Masked 类型,例如 Masked::new("password", '*'),可以指定掩码字符,将文本显示为星号等。
Ratatui 中 Spans 为什么改名为 Line?
因为 Line 是更合适的名称,Spans 的复数形式容易引起混淆,而该类型实际表示由多个 span 组成的一行文本。旧名 Spans 已标记为弃用。
从 tui-rs 迁移到 Ratatui 需要注意什么?
需要参考 Wiki 上的迁移指南,并且最低支持的 Rust 版本为 1.65.0。