TUI 间距与密度 PR1
为什么
当前的 TUI 经常在助手输出前、状态/工具块之间以及展开的工具组内部占用额外的行进行留白。在常规会话中,这导致简单回答、文件列表、工具输出、错误状态、diff 以及长流式输出更难快速浏览,因为用户需要滚动查看大量空白区域而非实际内容。
本 PR 是针对 QwenLM/qwen-code#4588 的首次专项优化。它仅处理间距和密度问题,以便在代码审查时能够纯粹对比前后的行数使用情况,而无需同时评估思考过程可见性、工具边框、SubAgent 布局、品牌标识或主题颜色等变更。
实现方案
本次实现保持了现有的信息结构和渲染层不变:
- 历史项间距统一在
HistoryItemDisplay附近处理。用户提示和独立命令视图仍以轮次分隔符开头,而助手续写、工具组、状态消息、工具摘要及相关的轮次内输出不再添加额外的前导空白行。 - 展开的工具组保留现有的边框和状态/标题结构,但不再在相邻的工具条目之间插入空白行。
- 工具结果直接渲染在工具标题/状态行下方。这消除了工具标题与其输出之间的额外空行,且不会改变输出内容、截断逻辑、shell 焦点、确认提示或紧凑模式行为。
Markdown 的空行行为有意保持不变。渲染器已能将连续的空白行折叠为一个空白行,并保留表格、代码块和数学块等复杂块结构。
间距规范
- 独立的用户轮次保留一个视觉分隔符。
- 助手输出及轮次内的后续块不再添加额外的分隔符。
- 工具标题与工具结果内容紧密相邻。
- 展开的多工具组不在各工具条目之间插入空白行。
- 复杂的 Markdown 块保留其现有的内部布局。
预期效果
在相同的终端宽度和渲染内容下,目标场景应减少可见行数:
- 简单问答场景至少减少 1 行可见行。
- 展开的工具输出中,对于之前存在标题/结果空白分隔符的每个工具结果,至少减少 1 行。
- 多工具组中,每两个相邻工具条目之间减少 1 行。
- 项目检查、diff、文件列表、错误和长流式输出场景不应增加行数,除非终端自动换行导致不可避免的增加。
效果度量
自动化间距断言和终端证据针对修改后的规则使用了 100 列宽度的测试 fixture:
| 场景 | 宽度 | 基准行数 | PR1 行数 | 差值 | 证据 |
|---|---|---|---|---|---|
| 简单的助手回复 | 100 | 2 | 1 | -1 | 移除了前导历史空白行 |
| 包含单行结果的工具标题 | 100 | 3 | 2 | -1 | 标题与结果紧密相邻 |
| 包含渲染结果的三工具展开组 | 100 | 16 | 11 | -5 | 每个工具结果移除一个标题/结果空白行,并在相邻工具之间移除一个工具间分隔符 |
| 完整代表性测试 fixture | 100 | 26 | 19 | -7 | 在 tmux 中捕获的相同渲染内容 |
快照 diff 还涵盖了现有的 80 列宽度测试 fixture,以确认在当前组件测试框架中产生相同的行数差值。
不在本次范围内
- 隐藏思考过程。
- 移除工具边框。
- 重新设计 SubAgent 输出。
- 更改启动品牌标识或横幅。
- 更改主题颜色。
- 添加每轮助手耗时。
- 更改表格内联代码高亮。
Last updated on