当终端窗口高度很低时,传统的垂直确认选择界面可能无法在一页内完整显示,影响用户体验。我们实现了智能的横向布局切换功能,在窗口空间受限时自动切换到横向显示模式。
-
触发条件:
- 窗口大小级别为
TINY(宽度≤50列 或 高度≤12行) - 可用终端高度 ≤ 8行
- 窗口大小级别为
-
横向布局特点:
- 选项水平排列,节省垂直空间
- 使用
○和●符号表示未选中/选中状态 - 支持左右箭头键(h/l)导航
- 在极小窗口下隐藏数字标号
📝 Apply changes?
● ✓ Apply ○ ✗ Cancel
Do you want to apply these changes?
● 1. Once
2. Always
3. Cancel
Do you want to apply these changes?
● Once ○ Always ○ Cancel
Do you want to apply these changes?
● 1. Once
2. Always
3. Always (Project)
4. Modify with Editor
5. Cancel
Do you want to apply these changes?
● Once ○ Always ○ Project ○ Edit ○ Cancel
新增支持参数:
layout:'vertical' | 'horizontal'- 布局方向horizontalSpacing:number- 横向间距
- 垂直布局: ↑↓ 箭头键或 k/j 键
- 横向布局: ←→ 箭头键或 h/l 键
- 通用: 数字键快速选择,回车确认,ESC取消
使用 useSmallWindowOptimization Hook:
const shouldUseHorizontalLayout =
smallWindowConfig.sizeLevel === WindowSizeLevel.TINY ||
(availableTerminalHeight !== undefined && availableTerminalHeight <= 8);正常窗口: Once | Always | Project | Edit | Cancel
横向布局: Apply | Cancel ← 功能过度简化
正常窗口垂直: Once | Always | Project | Edit | Cancel
正常窗口横向: Once | Always | Project | Edit | Cancel ← 功能完整
小窗口垂直: Once | Always | Cancel
小窗口横向: Once | Always | Cancel ← 与垂直布局对齐
极小窗口: Apply | Cancel ← 只在极限空间下简化
终端高度: 8行
┌─────────────────────────────────────────────┐
│ [隐藏Token统计框,节省3-4行空间] │
│ 📝 Apply changes? │
│ ● Once ○ Always ○ Cancel │ ← 横向布局
│ 使用←→或数字键选择,回车确认 │
└─────────────────────────────────────────────┘
- 在
ToolConfirmationMessage中根据窗口大小自动决定 - 支持不同工具类型的特定优化:
- Edit: 文件编辑确认
- Exec: 命令执行确认
- MCP: MCP工具确认
- Info: 信息类确认
- 单元测试验证横向/垂直布局渲染
- 键盘导航测试
- 不同窗口尺寸下的布局切换测试
这个优化确保了即使在最受限的终端环境下,用户也能获得良好的确认交互体验。