🟡 [M15] Ready 无 VisualHeightIndex 时走 Loading 滚动路径 #25
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
文件:
tui/app.rs:331-457分类: 滚动 / 状态机
问题: Ready 状态没有 VHI 时(resize/JSON toggle 后)使用 Loading 的滚动逻辑,混合逻辑偏移和视觉偏移,光标/视口不一致。
建议修复: 区分
ReadyWithoutIndex和Loading,Ready 期间使用保守的逻辑行滚动。@-
修复方案
根因: Ready 状态下 VHI 被异步 invalidate 后(Tab toggle / resize / file append / Loading→Ready),
v_offset仍保留视觉行偏移值,但所有函数开始将其当作逻辑行偏移处理,导致视口跳跃和光标漂移。VHI 异步重建完成后也未将v_offset从逻辑行重新校准回视觉行。修复 (
a43ef67):rebase_offset_for_invalidate(): 在 VHI 失效前将v_offset从视觉行转换为逻辑行 + 子行偏移,保留精确的视口内行位置poll_background_indexer中 VHI 就绪后,将v_offset从逻辑行映射回视觉行,并 clamp 子行偏移到新行高回归测试: 6 个新测试覆盖 rebase 转换、Tab toggle 不变量、VHI 重建校准、子行 clamp、Loading→Ready 转换。全部 352 测试通过。