Xterm.js: 回滚无法按预期工作

创建于 2016-11-17  ·  4评论  ·  资料来源: xtermjs/xterm.js

似乎总缓冲区大小希望是<viewport rows> + <scrollback> ,但是当我在 vscode 中将它连接到10 ,我注意到提供的回滚量不是 10 并且似乎在2 值。

运行ll以获取大量输出,我第一次得到 6 行回滚,第二次得到 8 行,第三次得到 5 行,第四次得到 7 行,等等。每次都应该正好是 10 行。

typbug

所有4条评论

由于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也会发生变化)。 不过,这是对当前模型的更改,如果我们这样做,最好将设置更改为bufferSizebufferLength

我有一个 WIP 分支,它使用CircularList类实现了这个新模型,它还没有 100% 工作,我现在将暂停它以专注于其他一些东西。 https://github.com/Tyriar/xterm.js/tree/361_circular_list_scrollback

@Tyriar我很乐意在你的分支上做一些测试,如果你认为时机是 🆗,我会提供反馈。

目前有点太破了,得找个时间把它弄完

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

travisobregon picture travisobregon  ·  3评论

ghost picture ghost  ·  4评论

kolbe picture kolbe  ·  3评论

fabiospampinato picture fabiospampinato  ·  4评论

jestapinski picture jestapinski  ·  3评论