似乎总缓冲区大小希望是<viewport rows> + <scrollback>
,但是当我在 vscode 中将它连接到10
,我注意到提供的回滚量不是 10 并且似乎在2 值。
运行ll
以获取大量输出,我第一次得到 6 行回滚,第二次得到 8 行,第三次得到 5 行,第四次得到 7 行,等等。每次都应该正好是 10 行。
由于scroll
的这种逻辑,这似乎正在发生:
if (++this.ybase === this.scrollback) {
this.ybase = this.ybase / 2 | 0;
this.lines = this.lines.slice(-(this.ybase + this.rows) + 1);
}
以下是一些观察/问题:
| 0
)scrollback
时,一大块行被切断scroll
上进行线条的修剪,不应该在附加this.lines
完成?slice
可能会导致性能问题,因为它会生成一个新数组并丢弃旧数组如果不是这个Terminal.lines
不断重建的模型,我们实现一个循环数组并将复杂性抽象到一个类中怎么办? 所以数组的大小总是Terminal.rows + Terminal.scrollback
,这意味着没有数组重建或shift
ing(这可能会在足够大的数组上出现问题)并且scrollback
被我们处理为旧的数组条目将被覆盖。
仅使用Terminal.scrollback
可能会更好,这样Terminal.lines
只需要在Terminal.scrollback
更改时才需要调整大小(而不是Terminal.rows
也会发生变化)。 不过,这是对当前模型的更改,如果我们这样做,最好将设置更改为bufferSize
或bufferLength
。
我有一个 WIP 分支,它使用CircularList
类实现了这个新模型,它还没有 100% 工作,我现在将暂停它以专注于其他一些东西。 https://github.com/Tyriar/xterm.js/tree/361_circular_list_scrollback
@Tyriar我很乐意在你的分支上做一些测试,如果你认为时机是 🆗,我会提供反馈。
目前有点太破了,得找个时间把它弄完