Auf einer höheren Ebene …

Auf einer höheren Ebene …

Ich versuche seit einigen Tagen, Informationen zu finden. Um es klar zu sagen, mein Ziel ist es, eine ncurses-ähnliche C-Bibliothek zu erstellen. Ich bin mir voll und ganz bewusstANSI-Escapesequenzund wie man sie benutzt. Ich möchte jedoch Portabilität, daher interessiere ich mich für terminfoDatenbanken. Ich habe Teile von Dokumentationen gelesen wie:

Dadurch konnte ich die Theorie und die Prinzipien verstehen, aber in der Praxis kann ich kein Beispiel dafür finden, wie man in einer Programmiersprache wie C auf die Datenbank zugreift bzw. eine Schnittstelle dazu herstellt.

Derzeit ist die einzige Möglichkeit, die mir einfällt, das Laden der terminfoBinärdatei der Datenbank in den Speicher und der manuelle Zugriff darauf, aber es erscheint mir merkwürdig, dass ich mein eigenes Schema erstellen soll und es keinen einfacheren/praktischeren/offizielleren Weg gibt, auf diese verdammten Datenbanken zuzugreifen.

Antwort1

Um auf die Termcap-Datenbank unter FreeBSD zuzugreifen, gibt esIsteine Möglichkeit, die im Betriebssystem vorhanden ist. Die FreeBSD C-Bibliothek verfügt über eine API für den ZugriffFähigkeiten-Datenbanken. So getcap()et al. sind die Funktionen, die aufgerufen werden müssen, um auf niedriger Ebene auf die Termcap-Datenbank zuzugreifen. (Tatsächlich gibt es APIs auf niedrigerer Ebene, aber sie abstrahieren nicht wie die getcap()API die Tatsache, dass Capabilities-Datenbanken entweder Flatfiles mit Datensätzen variabler Länge oder ordnungsgemäß indizierte binäre Datenbankdateien sein können, die mit dem cap_mkdbProgramm erstellt wurden.)

Auf einer höheren Ebene befinden sich tgetent(), tputs(), et al. (Diese existieren auch auf Terminfo-Betriebssystemen, wie beispielsweise vielen Linux-basierten Betriebssystemen.) Diese sind jedoch Teil der Termcap-Ncurses-Bibliothek, die sich in der FreeBSD-C-Bibliothek befindet; und Sie versuchen, Ihre eigene „Ncurses-ähnliche“ Bibliothek zu erstellen. (Auf den Linux-basierten Betriebssystemen sind sie Teil der Terminfo-Ncurses-Bibliothek.)

Ein Beispiel für den Zugriff auf Terminfo-Datenbankeinträge ohne Umweg über die Terminfo-API von ncurses ist die Unibilium-Bibliothek. NeoVIM verwendet diese.

Auf einer höheren Ebene …

Die Idee, dass terminfo/termcaptragbarerist im zweiten Jahrzehnt des 21. Jahrhunderts wirklich bis zum Zerreißen gespannt und darüber hinaus. Sie werden mit ziemlicher Sicherheit nie auf ein echtes Videoterminal stoßen, das nicht ECMA-48:1976-konform ist, ganz zu schweigen von einem Papierterminal. Und die Terminfo-Abstraktionen, die oft nicht wirklich dem entsprechen, was echte Videoterminals tun, sind in gewisser Weise einBehinderungauf die Portabilität, da sie eine etwas verzerrte Arbeitsweise erzwingen.

Dies gilt insbesondere fürTerminaleingang, das seit Anfang der 1980er Jahre tatsächlich ECMA-48 ist (mit einigen State-Machine-Plünderungen für RXVT, Interix, Linux KVT und die SCO-Konsole) und für das das Termcap/Terminfo-Modell mit passenden festen Zeichenfolgen sehr schlecht geeignet ist. Aber auch die Ideen von „lokalen“/„xmit“-Taschenrechnertastaturen, „Cursoradressierungsmodus“ und nur 3 Formen der Cursormanifestation usw. entsprechen nicht der tatsächlichen Funktionsweise von Terminals.

Wenn duSindWenn Sie ncurses neu erfinden, kopieren Sie bitte wenigstens nicht das Farbpaarmodell. Das passt kaum zu den Farbsystemen ECMA-48 und AIXterm, ganz zu schweigen von den indizierten und direkten Farbmechanismen ITU T.416, die Terminals seit über einem Vierteljahrhundert haben.

Weiterführende Literatur

verwandte Informationen