用途:为使用 Bubbletea v2 和 Charm 生态构建可维护、可测试的终端 UI(TUI)组件提供设计模式与最佳实践,内容基于 hive diff 查看器的实现经验。
主要能力与要点:
- 组件组织:每个组件单独成文件,各自拥有 Model、Update、View;复杂界面采用组合器模式,顶层 Model 编排子组件,Update 按焦点委派。
- 状态管理:所有状态显式放在 Model 中,避免闭包或包级隐藏状态;将不可变数据与可变 UI 状态分离。
- 异步与缓存:用 tea.Cmd 执行耗时操作,绝不阻塞 Update;先查缓存,未命中则标记 loading 并发起异步,通过自定义消息回传结果并写入缓存。
- 外部工具集成:初始化时检测工具可用性(如 delta),把纯函数逻辑独立出来便于测试,再包装为异步命令并处理错误。
- 交互模式:支持 vim 风格 normal/visual 模式,先处理模式切换,再按模式分派按键;提供选区范围归一化辅助方法。
- 滚动与视口:固定尺寸下计算可见行范围,遵循“光标先移动、视口跟随以保持光标可见”的原则。
- 编辑器集成:通过 EDITOR 环境变量(默认 vim)以 editor +line file 形式打开,交互式编辑器必须连接 stdin/stdout/stderr。
- 组件通信与焦点:用自定义消息协调父子组件,用 FocusedPanel 管理多面板焦点,Tab 切换;帮助弹窗等覆盖层在可见时拦截输入。
常见陷阱:在 View 中修改状态、在 Update 中做阻塞 I/O、Update 内堆积复杂逻辑;应保持 View 纯函数、用命令处理 I/O、抽取辅助方法。
限制:资料未提供安装命令、版本要求、平台支持、性能数据或收费信息,暂未提供。