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.
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:
| 0
)scrollback
erreicht istscroll
, sollte es nicht durchgeführt werden, wenn this.lines
angehängt wird?slice
kann zu Leistungsproblemen führen, da es ein neues Array erzeugt und das alte verwirftWas 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