Il semble que la taille totale du tampon veuille être de <viewport rows> + <scrollback>
, mais lorsque je le branche dans vscode pour être 10
, je remarque que la quantité de défilement fournie n'est pas de 10 et semble alterner entre 2 valeurs.
En exécutant ll
pour obtenir une partie de la sortie, j'obtiens 6 lignes de défilement la première fois, 8 la deuxième fois, 5 la troisième, 7 la quatrième, etc. Cela devrait être exactement 10 à chaque fois.
Cela semble se produire à cause de cette logique dans scroll
:
if (++this.ybase === this.scrollback) {
this.ybase = this.ybase / 2 | 0;
this.lines = this.lines.slice(-(this.ybase + this.rows) + 1);
}
Voici quelques remarques/questions :
| 0
)scrollback
est atteintscroll
, ne devrait-il pas être fait quand this.lines
est ajouté à ?slice
peut causer des problèmes de performances car il produit un nouveau tableau et supprime l'ancienEt si au lieu de ce modèle où Terminal.lines
est continuellement reconstruit, nous implémentions un tableau circulaire et réduisions la complexité à l'intérieur d'une classe ? Ainsi, un tableau est toujours de taille Terminal.rows + Terminal.scrollback
, ce qui signifie qu'il n'y a pas de reconstruction de tableau ou de shift
ing (ce qui peut poser des problèmes sur des tableaux suffisamment grands) et scrollback
est géré pour nous comme les anciennes entrées du tableau seront remplacées.
Il serait probablement encore mieux d'utiliser simplement Terminal.scrollback
, de cette façon Terminal.lines
n'aurait besoin d'être redimensionné que lorsque Terminal.scrollback
est modifié (par opposition à lorsque Terminal.rows
change aussi). C'est un changement par rapport au modèle actuel, il pourrait être bon de changer le paramètre en bufferSize
ou bufferLength
si nous faisons cela.
J'ai une branche WIP qui implémente ce nouveau modèle en utilisant une classe CircularList
, ça ne fonctionne pas encore à 100% et je vais le mettre en attente pour le moment pour me concentrer sur d'autres choses. https://github.com/Tyriar/xterm.js/tree/361_circular_list_scrollback
@Tyriar Je serais ravi de faire des tests sur votre branche et de donner votre avis si vous pensez que le moment est venu 🆗 .
C'est un peu trop cassé actuellement, va falloir trouver un peu de temps pour le finir