Skip to content

fix: keep TUI selections, overlays, and splits on screen - #175

Merged
zuohaisu merged 1 commit into
mainfrom
zuohaisu/fix-bug-1017-2
Oct 17, 2026
Merged

zuohaisu merged 1 commit into
mainfrom
zuohaisu/fix-bug-1017-2

Conversation

@zuohaisu

Copy link
Copy Markdown
Owner

Summary

工作台、office shell 和会话树有一批画面问题:选中行停在视口外,矮终端里状态栏盖住弹层底边,宽分割在 65535 处饱和,拒绝分栏时浏览器会被换成终端。对照 herdr 把滚动、显示宽度、弹层叠放和分割算法补上。

任务段现在和 agents 一起画在侧栏下半部,点击该行会把焦点设成 Tasks。文件列表、交接名单、office 列表和会话树按选中行滚动。文件面板和交接名单改到状态栏之后画。窗格不到 3×3 时不再画空边框。根上只剩浏览器时,太小的分栏会把浏览器放回去。50/50 的绘制和鼠标分割线共用 u32 比例。侧栏和窗格标题按显示宽度截断。

Refs #174

独立 QA 还没审当前 head,所以这里写 Refs,不写 Closes。

验收标准

  • 100×24 的默认工作台侧栏能看到任务目标,点击该行后焦点是 Tasks。
  • 60 个文件选到最后一项、50 个交接目标选到最后一项时,选中行在画面里。
  • 20×5 / 60×5 的文件面板和 40×10 的交接名单,底边不是状态栏文字。
  • 20×5 的两格布局,以及高度只有 2 行的窗格,内容行还在。
  • 20×5 和 60×5 上分栏被拒绝时,唯一的叶子仍是浏览器。
  • 1374 列的 50/50,绘制宽度和鼠标分割线都是 687。
  • 60×5、焦点在 agents、视口只剩一行时,画面上是名字。
  • 60×5 上超宽的中文和 emoji 分支名不擦掉侧栏分隔线。
  • office 任务列表滚到最后一项时,选中目标在画面里;20×5 仍能看到焦点标签和项目正文。
  • 1600×40 的 office 帮助框不 panic,宽度是终端的 60%。
  • 会话树滚到最后一项时,选中节点在画面里。

证据是 TestBackend 帧,不是那次被标成忽略的实机矩阵。

证据(Validation)

$ cargo fmt --all
$ cargo clippy -p viva --all-targets -- -D warnings
Finished `dev` profile [unoptimized + debuginfo] target(s) in 6.67s

$ cargo test --workspace -- --test-threads=8
lib: 339 passed; 0 failed; 1 ignored
其余 integration / bin 测试均为 passed,0 failed
ignored 的一项是 update::tests::live_github_release_updates_only_sandbox_binary(需要下载真实 release)

第一次全量里 server::v15_tests::handoff_moves_a_worktree_between_agents_with_a_brief
因 spawn ENOENT 失败一次。单独重跑通过,随后的全量也通过。该测试不经过这次改的绘制路径。

$ git diff --check
(提交前,无输出)

提交 87887da。

风险与安全边界(Risk/Safety Boundaries)

只改客户端绘制和窗格几何。没有改权限、版本号、发布、存储或 redaction。分栏下限仍是 8×3;变的是拒绝时把单独的浏览器放回去,以及已经分好的布局缩小时不再画出空边框。

未验证项(Known Limitations)

颜色对比、鼠标捕获、真实 PTY 光标、子进程占着备用屏幕时的缩放,以及嵌在 Viva 终端里的 Pi 界面,这次没有跑。拖动分割线、右键菜单、帮助/设置/跳转弹层没有进上一轮矩阵,这次也没有改它们的叠放。

终端模式里 Esc 仍送出 0x1b。分栏键仍是 prefix+v 和 prefix+-。裸按 1/2/3 仍不切换侧栏;任务段靠点击进入,进去之后 j/k 能在任务里移动。布局算出来高度为 0 的格子仍然没有内容行,这次修的是外框只剩 2 行、内容被边框吃掉的情况。

下一步:等独立 QA 对当前 head 给出可合并结论。

Made with Cursor

Lists followed the index without moving the viewport, overlays were painted under the status bar, and wide splits saturated a u16 multiply. A refused split on a lone browser also left the replacement terminal behind.

Co-authored-by: Cursor <cursoragent@cursor.com>
@zuohaisu
zuohaisu merged commit e804a6b into main Oct 17, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant