Wie wird die GUI von Vim implementiert, wenn es sich um ein Programm handelt, das auf einem Terminal ausgeführt wird?

Wie wird die GUI von Vim implementiert, wenn es sich um ein Programm handelt, das auf einem Terminal ausgeführt wird?

Ich kann nicht herausfinden, wie Programme wie Vim (oder beispielsweise top) implementiert werden, die im Terminal ausgeführt werden und eine grafische Benutzeroberfläche haben. Es wird angenommen, dass das Terminal nur Zeichen anzeigen kann und Vim nicht nur mehrere Fenster anzeigen kann, sondern auch den Cursor in alle Richtungen bewegen kann.

Ein weiteres Beispiel ist LinuxSpitzeDienstprogramm, das Informationen anzeigt inEchtzeitdas aktualisiert wird, wie ist es möglich, dass dieses Programm die Informationen aktualisieren kann, anstatt einerunterscrollenund neue gedruckte Zeichen anzeigen?

Antwort1

Anwendungen, die in einem Terminal ausgeführt werden, könnenTextBenutzeroberfläche, da die meisten Terminals nicht nurdumme Terminalsdie nur Zeichen drucken und zur nächsten Zeile springen können, aber „intelligente“ Terminals, dieSteuerzeichenUndEscape-Sequenzenmit Bedeutungen wie „aktuelle Zeile löschen und nachfolgende Zeilen nach oben scrollen“, „an Position (53,7) bewegen“, „von nun an in leuchtendem Rot drucken“ usw.

Die meisten Terminalemulatoren implementieren die meistenEscape-Sequenzen von xterm, selbst weitgehend kompatibel mit demVT100Hardware-Terminal und seine Nachfolger. Anwendungen wissen, welche Escape-Sequenzen gesendet werden müssen, um verschiedene Aktionen über dasBegriffserklärungoderTermininfoDatenbanken. SieheWie funktionieren Tastatureingabe und Textausgabe?(Abschnitt „Textmodus-Anwendung, die in einem Terminal ausgeführt wird“) undWie und wo wird $TERM interpretiert?für mehr Details.

Neben einer textbasierten Benutzeroberfläche verfügt Vim auch über eine grafische Benutzeroberfläche namens GVim. Diese Benutzeroberfläche läuft auf einem grafischen Terminal, das dieX11-Protokoll, nicht auf einem Textterminal (aber natürlich können SieStartdie Anwendung aus einem Textterminal heraus, wird sie in diesem Terminal einfach nicht angezeigt).

Antwort2

vimund gvimkönnen separate ausführbare Dateien sein, die mit verschiedenen Bibliotheken verknüpft sind. Es ist möglich, dass eine ausführbare Datei beide Schnittstellen verwendet (Elvis und Emacs tun dies beispielsweise). Vim 4.0 hat 1996 eine -gOption hinzugefügt, mit der man die GUI-Version verwenden kann (die in diesem Fall Teil derselben ausführbaren Datei wäre).

Ich habe keine Kopie der Ankündigung für 4.0 gefunden (die vielleicht Hinweise auf die Motivation für die -gOption gegeben hätte (vims Ankündigungs-Mailingliste begann in1997), aber siehe dazu eine Erwähnung in einer alten FAQ von Laurent Duperval:

7.3 How can I make Vim faster on a Unix station?

   The GUI support in Vim 4.0 can slow down the startup time noticeably.
   Until Vim supports dynamic loading, you can speed up the startup time
   by compiling two different versions of Vim: one with the GUI and one
   without the GUI and install both. Make sure you remove the link from
   $bindir/gvim to $bindir/vim when installing the GUI version, though.

   If screen updating is your problem, you can run Vim in screen. screen
   is an ascii terminal multiplexer. The latest version can be found at
   <URL:ftp://ftp.uni-erlangen.de:/pub/utilities/screen>.

Soweit ich mich erinnere, gab es eine Zeit lang zwei ausführbare Dateien (alsDasgeändert werden müsste, wäre eine Menge Recherche zu den tatsächlich verwendeten Paketen erforderlich). Aber die Möglichkeit dazu gab es ab 1996.

Bei beiden Schnittstellentypen gibt es Möglichkeiten, die Anzeige zu aktualisieren. Für gvim werden die X-Bibliotheken verwendet, während Terminalanwendungen wie top(odervim) verwenden Escape-Sequenzen. Je nach System sind beideBegriffserklärungAnwendungentop, die ihr Repertoire an Escape-Sequenzen über die Termcap-Schnittstelle von ncurses erhalten usw. (einige Versionen vonverwendenncurses zur Anzeige, z. B. htop). vim erweitert dieses Repertoire mithilfe integrierter Tabellen (die oft redundant sind).

Interessanterweise ist die procpsVersion von topin Debian (eine relative Seltenheit) eineTermininfoAnwendung, wie man an der Inspektion derQuellcode.

Antwort3

Als Nachfolge des ursprünglichen TTY sind Terminals verfügbar geworden, die den Drucker durch eine VDU ersetzen.

Ein Bildschirm weist etwas andere Eigenschaften als Papier auf. Zeichen auf dem Display können gelöscht und ersetzt, nicht nur überschrieben werden.

ASCII stellte für einen einfachen Zeilendrucker genügend Steuerzeichen bereit, berücksichtigte jedoch nicht die Bildschirmausgabe. Zusätzliche terminalspezifische Steuerelemente werden in ASCII mit einem „Escape“ codiert. Eine Escape-Sequenz wird mit einem ASCII-Escape-Zeichen eingeleitet. Die folgenden Zeichen in der Sequenz werden als terminalspezifische Steuerelemente interpretiert.

Der visuelle Editor viist ein gutes Beispiel für eine Anwendung, die diese neue Technologie nutzt.

Die Escape-Codes werden standardisiert. Wenn Sie über aktuelle Dokumentation verfügen, ist „ANSI escape“ möglicherweise ein guter Begriff, den Sie in derIndex.

verwandte Informationen