Xterm.js: scrollback funktioniert nicht wie erwartet

Erstellt am 17. Nov. 2016  ·  4Kommentare  ·  Quelle: xtermjs/xterm.js

Es scheint, dass die Gesamtpuffergröße <viewport rows> + <scrollback> betragen möchte, aber wenn ich sie in vscode auf 10 , stelle ich fest, dass die Menge des bereitgestellten Scrollbacks nicht 10 ist und zwischen denen zu wechseln scheint 2 Werte.

Wenn ich ll ausführe, um einen Teil der Ausgabe zu erhalten, erhalte ich beim ersten Mal 6 Zeilen Scrollback, beim zweiten Mal 8, 5 beim dritten, 7 beim vierten usw. Es sollten jedes Mal genau 10 sein.

typbug

Alle 4 Kommentare

Dies scheint aufgrund dieser Logik in scroll zu passieren:

  if (++this.ybase === this.scrollback) {
    this.ybase = this.ybase / 2 | 0;
    this.lines = this.lines.slice(-(this.ybase + this.rows) + 1);
  }

Hier ein paar Beobachtungen/Fragen:

  • Es gibt eine seltsame Bitweise oder von der ich glaube, dass sie nichts tut ( | 0 )
  • Ein Zeilenblock wird abgeschnitten, wenn scrollback erreicht ist
  • Warum wird das Trimmen der Zeilen auf scroll , sollte es nicht durchgeführt werden, wenn this.lines angehängt wird?
  • Das slice kann zu Leistungsproblemen führen, da es ein neues Array erzeugt und das alte verwirft

Was wäre, wenn wir anstelle dieses Modells, bei dem Terminal.lines ständig neu erstellt wird, ein kreisförmiges Array implementieren und die Komplexität innerhalb einer Klasse abstrahieren? Ein Array hat also immer die Größe Terminal.rows + Terminal.scrollback , d.h. es gibt keine Array-Rekonstruktion oder shift ing (was bei ausreichend großen Arrays zu Problemen führen kann) und scrollback wird für uns behandelt als alte Array-Einträge werden überschrieben.

Es wäre wahrscheinlich noch besser, einfach Terminal.scrollback , auf diese Weise müsste Terminal.lines nur dann geändert werden, wenn Terminal.scrollback geändert wird (im Gegensatz zu Terminal.rows ändert sich auch). Dies ist jedoch eine Änderung gegenüber dem aktuellen Modell, es könnte gut sein, die Einstellung in bufferSize oder bufferLength zu ändern, wenn wir dies tun.

Ich habe einen WIP-Zweig, der dieses neue Modell mit einer CircularList Klasse implementiert, es funktioniert noch nicht zu 100% und ich werde es vorerst auf Eis legen, um mich auf andere Dinge zu konzentrieren. https://github.com/Tyriar/xterm.js/tree/361_circular_list_scrollback

@Tyriar Ich würde gerne einige Tests in Ihrem Zweig durchführen und Feedback geben, wenn Sie der Meinung sind, dass der Zeitpunkt für .

Es ist derzeit etwas zu kaputt, muss etwas Zeit finden, um es fertig zu stellen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

albinekb picture albinekb  ·  4Kommentare

Tyriar picture Tyriar  ·  4Kommentare

parisk picture parisk  ·  3Kommentare

circuitry2 picture circuitry2  ·  4Kommentare

LB-J picture LB-J  ·  3Kommentare