Skip to content

终端 resize 时底部输入框蓝色边框/分隔线残留并累积(疑似 Ink 6.2.3 擦除与 reflow 不匹配) #3824

@RunMintOn

Description

@RunMintOn

What happened?

终端窗口 resize 时,主要异常并不是正文文字重叠,而是 底部输入框 / composer 区域的蓝色边框、分隔线会不断残留并累积

具体现象:

  • 拖拽终端窗口放大/缩小时,底部输入区会留下旧帧的蓝色横线
  • 每次 resize 都会再多累积一层
  • 缩放几次后,下半部分会出现越来越多条蓝线残影
  • 停止缩放后通常也不会自动恢复

更准确地说,是 输入框区域的旧边框没有被正确擦除,新帧又继续画上去,导致蓝色横线按帧累积

复现截图:

What did you expect to happen?

终端窗口 resize 后,界面应正确重绘:

  • 输入框区域的边框/分隔线不应残留
  • 不应随着 resize 次数不断累积蓝色横线
  • 停止缩放后界面应保持干净一致

Client information

  • Qwen Code: v0.15.6
  • 依赖锁定:ink@6.2.3

已确认可复现环境:

  • macOS + Warp
  • macOS + iTerm2
  • Windows + WSL(本地手动测试,问题仍然存在)

Login information

No response

Anything else we need to know?

我本地对源码做了只读核对,当前的高置信度判断是:

  • Qwen Code 通过 process.stdoutresize 事件更新终端尺寸
  • Ink 在收到 resize 后会走:resized() -> calculateLayout() -> onRender()
  • Ink / log-update 在重绘前会先执行基于上一帧行数的擦除:ansiEscapes.eraseLines(previousLineCount),再写入新内容
  • resize 后,同一份 UI 内容在新宽度下会 reflow,但擦除旧帧时仍使用上一帧记录的高度
  • 对于带边框的输入区域,这会导致 旧边框没有被完整擦掉,新边框再画一次,于是蓝色横线不断累积

所以当前更像是:

high-confidence likely root cause:Ink 6.2.3 在 terminal resize + reflow 场景下,旧帧擦除高度与新宽度下的实际占用高度不匹配。

相关代码路径(只读核对):

  • packages/cli/src/ui/hooks/useTerminalSize.ts
  • packages/core/src/agents/backends/TmuxBackend.ts
  • ink@6.2.3

另外,仓库里已有一个较泛的相关问题:#3213。这个 issue 是想把现象进一步具体化到 输入框蓝色边框线条累积残影 这个表现。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions