TUI 组件
Pi 的终端用户界面 (TUI) 基于自定义组件系统构建,提供丰富的终端交互体验。
Component 接口
所有 TUI 组件实现统一的 Component 接口:
方法说明
行宽要求
render() 返回的每一行必须精确填充指定宽度。不满宽度的行需要用空格填充,超出宽度的行会导致渲染错误。
IME 支持
Pi 的 TUI 支持输入法编辑器 (IME),可以正确处理中文、日文、韩文等需要组合输入的语言:
- 在组合输入期间显示预编辑文本
- 正确处理组合窗口的定位
- 支持候选词选择
内置组件
Pi 提供以下内置 TUI 组件:
在扩展和工具中使用
扩展和自定义工具可以使用内置 TUI 组件构建交互界面:
覆盖组件
可以通过主题或扩展覆盖内置组件的渲染行为:
键盘处理
TUI 使用 Kitty 键盘协议进行精确的按键检测:
修饰键
性能
TUI 渲染遵循以下性能原则:
- 脏检测:仅在
invalidate()被调用后重新渲染 - 差异更新:仅重绘发生变化的行
- 节流:渲染频率限制为每秒 60 帧
- 懒加载:不可见的组件不会被渲染
主题
TUI 组件通过主题系统支持样式自定义:
常见模式
带取消的长时间操作
确认操作
表格输出
关键规则
- 行宽精确:
render()返回的每一行必须精确匹配传入的width参数 - 输入消费:
handleInput()必须返回事件是否被消费,未消费的事件会冒泡到父组件 - 不可直接写终端:组件不应直接使用
process.stdout.write(),所有输出必须通过render()返回 - 无状态渲染:
render()应为纯函数,所有状态变更应在handleInput()或其他方法中完成 - 无阻塞操作:
render()和handleInput()不应执行 I/O 或其他阻塞操作 - 资源清理:组件被销毁时必须清理定时器、事件监听器等资源