Xterm.js: Flüssiges Scrollen

Erstellt am 11. Dez. 2017  ·  16Kommentare  ·  Quelle: xtermjs/xterm.js

Als jemand, der neu in der Arbeit mit CLIs ist, finde ich es kognitiv schwieriger, das in Terminals verwendete zeilenweise Scrollen im Gegensatz zum reibungslosen Scrollen der meisten anderen Anwendungen anzuzeigen. Ich habe gelernt, dass es daran liegt, dass in einem Terminal das Zeichen und nicht das Pixel die kleinste Anzeigeeinheit ist.

Ist es möglich (und wünschenswert) für xterm.js, dies zu umgehen und eine reibungslose pixelbasierte Bildlaufoption zu integrieren?

Ich habe @albinekb ursprünglich dasselbe für Hyper (https://github.com/zeit/hyper) gefragt und er hat mich auf dieses Projekt verwiesen, da Hyper xterm.js verwendet.

aremouse-support typenhancement

Hilfreichster Kommentar

etwas, das so wenige Leute benutzen würden

Jeder, der mit dem Touchpad scrollt, nutzt es in VTE, ob er will oder nicht :D

Alle 16 Kommentare

Es ist sicherlich möglich, aber es wäre ziemlich viel Arbeit (+ zusätzliche Komplexität) für etwas, das so wenige Leute verwenden würden. Ich möchte dies lieber nicht persönlich hinzufügen.

Das ist verständlich und gerecht. Danke für deine Arbeit!

Zu Ihrer Information: VTE (GNOME Terminal und Freunde) macht dies seit Version 0.44. (Das funktioniert natürlich nur im Scrollback des Terminal-Emulators, nicht beim Scrollen der Datei zB in einem Texteditor.)

etwas, das so wenige Leute benutzen würden

Jeder, der mit dem Touchpad scrollt, nutzt es in VTE, ob er will oder nicht :D

@egmontkob Ich habe hier das Gnome-Terminal 3.18.3 und es scheint nicht zu funktionieren, der Scrollbereich in den Profileinstellungen scheint auch keine Einstellung zu haben?

screen shot 2017-12-18 at 6 57 19 am

gt 3.18.3 bedeutet höchstwahrscheinlich, dass Sie vte 0.42 haben, während diese Funktion in 0.44 neu ist.

Keine neue Einstellung (es gibt eine ausstehende Anfrage mit

Jemand hat bereits seine Abneigung geäußert, dass dies in VTE nicht konfigurierbar ist. Ob Sie dieses Feature überhaupt in xtermjs implementieren und wenn ja, ob Sie es konfigurierbar machen, ist natürlich ganz Ihre Wahl.

Ich denke, es könnte ein wertvoller Datenpunkt für Sie sein, dass diese Funktion seit mehr als 1,5 Jahren in VTE vorhanden ist und allen VTE-Benutzern "aufgezwungen" wird, die ein Trackpad verwenden (anstelle eines Mausrads, das "Einheiten" des Scrollens sendet) wofür wir immer noch ganze Zeilen scrollen), und während dieser Zeiten habe ich insgesamt 2 oder vielleicht 3 Beschwerden gehört, um das alte Verhalten zurückzubringen. Wenn diese Funktion scheiße wäre, gäbe es viel mehr Beschwerden.


Ich habe keine Nutzungszahlen oder ein Verhältnis zu VTE, das nächste, was ich habe, sind die Ergebnisse dieser Umfrage (beachten Sie, dass das Datum des Artikels verstümmelt ist, basierend auf den Zeitstempeln der Kommentare ist es eine 2 Jahre alte Abstimmung), was darauf hindeutet, dass VTEs Der Marktanteil unter Linux-Terminalemulatoren liegt im Bereich von 50%, also ziemlich groß. Viele Leute da draußen verwenden bereits flüssiges Scrollen.


Ich bin neu bei xtermjs und Freunden und habe es noch nicht ausprobiert. Sieh nur, dass hier coole Dinge passieren. Ich bin mir nicht sicher, ob ich die richtige Architektur im Kopf habe, aber wenn ich dies tue, ist GNOME Terminal für VTE das, was hterm für xtermjs ist. VTE ist ein GTK+-Widget, das eine Terminalemulation durchführt. Es gibt etwa ein Dutzend mehr oder weniger beliebte Terminal-Emulator-Apps, die VTE verwenden, darunter GNOME Terminal, Xfce4 Terminal, Terminator, Tilix...


Falls Sie das Verhalten ausprobieren möchten, ist der einfachste Weg (sowie für alle VTE-Funktionen, die keine Zusammenarbeit mit dem GNOME-Terminal erfordern), nur VTE zu kompilieren und seine Test-App zu starten:

  • Holen Sie sich von Git oder Tarball
  • ./autogen.sh (git) oder ./configure (Tarball)
  • make
  • ./src/app/vte-2.91 (ab 0.51) oder ./src/testvte (bis 0.50) oder ./bindings/vala/vte-2.91 oder ./src/vte-2.91 (bis 0.50, wurde irgendwann in ein anderes Verzeichnis verschoben)

Ich habe das Mausrad benutzt, das ist mein Problem :sweat_smile:

Im ersten Post habe ich vergessen, das ziemlich wichtige Detail zu erwähnen, dass ich tatsächlich ein Trackpad verwende. Abgesehen von Trackpad-Benutzern oder Benutzern anderer berührungsbasierter Eingabemethoden verstehe ich, dass nur wenige Leute pixelbasiertes Scrollen bevorzugen.

IMO kann man mit Sicherheit sagen, dass es zu diesem Zeitpunkt nur von den Benutzern erwartet wird. Ich meine, sogar hterm hat es.

Mit dem Canvas-Renderer ist das nicht wirklich möglich, aber mit dem Webgl-Renderer https://github.com/xtermjs/xterm.js/pull/1790 , der den Canvas-Renderer ersetzen sollte, sollte es ziemlich einfach sein. Für den DOM-Renderer können wir dies erreichen, indem wir oben und unten teilweise sichtbare Linien haben. Daher betrachte ich dies als blockiert auf #1790

Etwas anderes zu beachten: Wenn ydisp keine ganze Zahl ist und mehr als Zeilen als Terminal.rows sichtbar sind, werden einige Annahmen im Code verletzt, zum Beispiel wie wirkt sich dies auf die Unterstützung von Bildschirmleseprogrammen aus?

Mit dem Canvas-Renderer ist das nicht wirklich möglich

Warum nicht? Es sollte so einfach sein wie das Zeichnen von viewportHeight + 2 Zeilen und das Versetzen irgendwo zwischen der ersten und zweiten Zeile basierend auf dem Pixel-Offset der aktuellen Bildlaufposition.

Es ist sicherlich möglich, aber es wäre ziemlich viel Arbeit (+ zusätzliche Komplexität) für etwas, das so wenige Leute verwenden würden. Ich möchte dies lieber nicht persönlich hinzufügen.

Fwiw ich wollte die gleiche Funktion anfordern. Ich persönlich halte das für einen wichtigen Schritt hin zu mehr Benutzerfreundlichkeit. Die Tatsache, dass es nicht breiter unterstützt wird, könnte damit erklärt werden, dass es eine relativ neue Idee ist und wir Programmierer dazu neigen, uns einfach an die Einschränkungen zu gewöhnen, mit denen wir arbeiten müssen.

Warum nicht?

@sdegutis ja, es ist möglich, damals dachte ich, dass der Canvas-Renderer stark optimiert wird, indem eine spezielle Logik verwendet wird, um nur Abschnitte des Inhalts zu

Es sollte ziemlich einfach sein, dies in Gang zu bringen, es muss nur für 3 Renderer durchgeführt werden und insbesondere Webgl benötigt einige spezielle Anpassungen (Vergrößerung des Attributpuffers, da mehr Zellen gezeichnet werden als Zeilen * Spalten).

Ich würde diese Funktion auch lieben, mein Problem ist eigentlich nicht nur die Ästhetik, sondern ein Usability-Problem. Das Problem ist, dass eine Aktion viel zu viele Sprünge auf dem Terminal verursacht und die Tatsache, dass es kein reibungsloses Scrollen gibt, macht es fast unmöglich zu verstehen, welche Zeilen übersprungen wurden. Es macht das Terminal wirklich schwer zu bedienen.

Jedes Mal, wenn ich in Visual Studio Code durch das Terminal scrolle, verliere ich den Überblick, wo ich war. Glattes Scrollen ist eine grundlegende Funktion und wir brauchen sie.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

albinekb picture albinekb  ·  4Kommentare

zhangjie2012 picture zhangjie2012  ·  3Kommentare

Mlocik97-issues picture Mlocik97-issues  ·  3Kommentare

fabiospampinato picture fabiospampinato  ·  4Kommentare

Tyriar picture Tyriar  ·  4Kommentare