#261·ora

在动画过程中调整大小时,旋转器会出现失步并损坏终端输出(多行折行文本)

作者: dpc00创建于 2026年9月12日更新于 2026年9月12日

`Ora#updateLineCount()` 计算当前文本使用 `this.#stream.columns` 时需要多少终端行,并将结果缓存到 `#lineCount` 中。它只会在 `text`/`prefixText`/`suffixText`/`indent` 设置器中调用 - 从不响应终端调整。`clear()` (在每次 `render()` 的顶部调用,即每个动画帧) 使用缓存的 `#linesToClear` 来将 Cursor 上移并擦除上一帧。如果在旋转器运行期间终端被调整,并且文本足够长以跨越多行,则实际的包裹行数会发生变化,但缓存的值不会 - 因此每个后续的 `clear()` 都会擦除屏幕的错误区域。这不是一个单帧的故障:因为 `#lineCount` 永远不会在旋转器的剩余生命周期内重新计算,因此同步失效是永久的,并且可以逐渐损坏与旋转器相关的相关终端内容。

内容来源: sindresorhus/ora