Wie kann ich Terminfo-Einträge unter FreeBSD verwenden?

Wie kann ich Terminfo-Einträge unter FreeBSD verwenden?

Auf meinem lokalen Linux-Rechner verwende ichTermite (auf VTE-Basis). Es kommt mit seinem eigenenTermininfoDatei ( xterm-termite), die standardmäßig nicht mit ncurses verteilt wird.

Ich versuche, eine Verbindung zu einem Remote-FreeBSD-Server herzustellen. Leider verwendet FreeBSD standardmäßig nur das ältere Termcap-Format. Ich konnte keine Möglichkeit finden, Terminfo in Termcap zu konvertieren. Obwohl ich also eine Version von ncurses kompilieren kann, die Terminfo-Unterstützung von den Ports ( devel/ncurses) enthält, werden ncurses-Anwendungen standardmäßig mit der vom System bereitgestellten Bibliothek verknüpft. Dies führt dazu, dass Apps nicht gestartet werden können:

$ echo $TERM
xterm-termite
$ toe | grep termite
xterm-termite   VTE-based terminal
$ tmux
open terminal failed: can't find terminfo database
$ htop
Error opening terminal: xterm-termite.

( toelistet Terminfo-Einträge auf)

Wie kann ich FreeBSD dazu bringen, standardmäßig terminfo zu verwenden, oder Anwendungen zwingen, die vom Port bereitgestellte ncurses-Bibliothek zu verwenden oder zumindest terminfo in termcap-Daten zu konvertieren?

(Ich bin mir derProblemumgehungenwie das Setzen TERMeines sicheren Wertes wie xterm-256color, aber ich denke, das verfehlt den Zweck von terminfo)

Antwort1

Die herkömmliche Methode zum Konvertieren von Terminfo in Termcap ist mit

infocmp -Cr

DerinfocmpOption -Cgibt infocmpan,BegriffserklärungNamen, und die -rOption sagt ihm, terminfo zu übersetzenFähigkeitenin das Termcap-Format. Einige (wie die in verwendeten Ausdrücke sgr) lassen sich nicht übersetzen und infocmpkönnen auskommentierte Fähigkeiten hinterlassen, wenn genügend Platz vorhanden ist.

Mit „genügend Platz“ ist die Tatsache gemeint, dass echte Termcap-Anwendungen nur 1023 Bytes in einer Beschreibung zulassen. FreeBSD verwendet darunter ncurses, aber einige Anwendungen machen Annahmen über die Eintragslänge.

FreeBSD verfügt jedoch über eine Termcap-Datei, die von ncurses unabhängig ist. Es gibt auch einen „Port“ für ncurses, den manche nützlich finden.

Übrigens, vielleicht meinen Sie das hier:termite/termite.terminfo. Wenn Sie es übersetzt haben, sehen Sie möglicherweise etwas wie

# vim: noet:ts=8:sw=8:sts=0
# (untranslatable capabilities removed to fit entry within 1023 bytes)
# (sgr removed to fit entry within 1023 bytes)
# (acsc removed to fit entry within 1023 bytes)
# (terminfo-only capabilities suppressed to fit entry within 1023 bytes)
xterm-termite|VTE-based terminal:\
        :am:hs:km:mi:ms:xn:\
        :co#80:it#8:li#24:\
        :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
        :K2=\EOE:LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:\
        :UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:\
        :ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:\
        :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
        :ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:\
        :is=\E[!p\E[?3;4l\E[4l\E>:k1=\EOP:k2=\EOQ:k3=\EOR:\
        :k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
        :k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:\
        :kd=\EOB:ke=\E[?1l\E>:kh=\EOH:kl=\EOD:kr=\EOC:\
        :ks=\E[?1h\E=:ku=\EOA:le=^H:md=\E[1m:me=\E[0m:mh=\E[2m:\
        :mm=\E[?1034h:mo=\E[?1034l:mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:\
        :se=\E[27m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:te=\E[?1049l:\
        :ti=\E[?1049h:ts=\E]2;:ue=\E[24m:up=\E[A:us=\E[4m:\
        :vb=\E[?5h\E[?5l:ve=\E[?12l\E[?25h:vi=\E[?25l:\
        :vs=\E[?12;25h:

Der Terminfo-Eintrag enthält einige Fehler (VTE unterstützt beispielsweise den Metamodus nicht). Außerdem werden Sie im Termcap-Format möglicherweise feststellen, dass die meisten Funktionstasten fehlen (1023-Byte-Grenze).

Weiterführende Literatur:

Antwort2

Manchmal müssen Sie einige manuelle Änderungen vornehmen, um Dinge richtig zu übersetzen.

Ich habe die folgenden Änderungen vorgenommen, um die „wichtigen“ Teile der Beschreibung zu übersetzen.

  • Entfernte Funktionen, die nicht im Termcap-Format dargestellt werden können:
    • Dynamischer Farbwechsel (ccc/initc)
    • Multiattribut-Einstellungssequenz (sgr)
    • Visual Bell (Blitz, erfordert eine Zwischenverzögerung, die in Termcap nicht funktioniert)
  • Entfernte Funktionen, die nicht nützlich sind:
    • VT100-Box-Zeichensatz (smacs/rmacs/acsc, auch sgr0 geändert)
    • 8-Bit-Metaschlüssel (km/smm/rmm), außerdem hat Thomas Dickey erwähnt, dass er eigentlich nicht funktioniert.
    • Drucken (mc5i/mc0/mc4/mc5)
    • Blinkender Cursor (cvvis, auch cnorm geändert)
    • HP verflucht Erweiterungen (meml/memu)
    • Dynamisches Ändern von Tabstopps (hts/tbc)
    • Selten verwendete Attribute (dim/invis)
  • Selten genutzte und zu lange Funktionen entfernt
    • Umgeschaltete Funktions-/Cursortasten (kf13+, kLFT/usw. [Namen in Großbuchstaben], kind, kri [für Umschalt-hoch/runter])
    • Init- und Reset-Sequenzen im Langformat (is2/rs2)
    • Terminalidentifikation und Antwort (u8/u9)
  • Einige Dinge wurden umgeschrieben, damit sie besser passen bzw. mit Termcap kompatibel sind
    • Setab/Setaf in eine weniger effiziente, Termcap-kompatible Version geändert
    • smkx/rmkx/clear geändert, um kürzer zu sein

Dadurch wurde die Anzahl auf 1001 Zeichen reduziert, ohne dass etwas „Wichtiges“ verloren ging (insbesondere werden weiterhin 256 Farben und das Festlegen des Titelleistentexts unterstützt).

xterm-termite|VTE-basiertes Terminal:\
    :NP:am:hs:mi:ms:ut:xn:\
    :Co#256:co#80:it#8:li#24:pa#32767:\
    :@7=\EOF:@8=\EOM:AB=\E[48;5;%dm:AF=\E[38;5;%dm:AL=\E[%dL:\
    :DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:F1=\E[23~:F2=\E[24~:\
    :IC=\E[%d@:K2=\EOE:Km=\E[M:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:\
    :SA=\E[?7h:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:ZH=\E[3m:\
    :ZR=\E[23m:al=\E[L:bl=^G:bt=\E[Z:cb=\E[1K:cd=\E[J:ce=\E[K:\
    :ch=\E[%i%dG:cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:\
    :cs=\E[%i%d;%dr:cv=\E[%i%dd:dc=\E[P:dl=\E[M:do=^J:\
    :ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:\
    :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\
    :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kB=\E[Z:kD=\E[3~:\
    :kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:kd=\EOB:ke=\E[?1l:\
    :kh=\EOH:kl=\EOD:kr=\EOC:ks=\E[?1h:ku=\EOA:le=^H:md=\E[1m:\
    :me=\E[m:mr=\E[7m:nd=\E[C:op=\E[39;49m:r1=\Ec:rc=\E8:\
    :sc=\E7:se=\E[27m:sf=^J:so=\E[7m:sr=\EM:ta=^I:te=\E[?1049l:\
    :ti=\E[?1049h:ts=\E]2;:u6=\E[%i%d;%dR:u7=\E[6n:ue=\E[24m:\
    :up=\E[A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:

Beachten Sie, dass für alle eingerückten Zeilen Tabulatoren zur Einrückung verwendet werden sollten.

Das Wichtigste für die Farbunterstützung sind die AB- und AF-Funktionen – sie konnten nicht automatisch von setab/setaf übersetzt werden, da es sich um ein 256-Farben-Terminal handelt. Der relevante Teil des Termcaps ist :AB=\E[48;5;%dm:AF=\E[38;5;%dm:; für den Nicht-256-Farben-Modus wäre es :AB=\E[4%dm:AF=\E[3%dm:(und Co#8, pa#64passend).

verwandte Informationen