Auf meinem lokalen Linux-Computer verwende ich Termite (VTE-basiert) . Es wird mit einer eigenen terminfo- Datei ( xterm-termite
) geliefert , 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 habe keine Möglichkeit gefunden, terminfo in termcap umzuwandeln. Während 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.
( toe
listet terminfo Einträge auf)
Wie kann ich FreeBSD dazu bringen, terminfo standardmäßig zu verwenden, oder Anwendungen dazu zwingen, die vom Port bereitgestellte ncurses lib zu verwenden, oder terminfo zumindest in termcap-Daten konvertieren?
(Ich bin mir der Problemumgehungen bewusst, wie das Festlegen TERM
eines sicheren Werts wie xterm-256color
, aber ich denke, dass dies den Zweck von terminfo zunichte macht.)
infocmp -C
, einen Termcap-Eintrag zu erstellen.infocmp -C xterm-termite >> /usr/share/misc/termcap; cap_mkdb /usr/share/misc/termcap
. Fühlen Sie sich frei, es als Antwort hinzuzufügen, damit ich es genehmigen kann.Antworten:
Die herkömmliche Methode zum Konvertieren von terminfo in termcap ist mit
Die Option infocmp
-C
weistinfocmp
an, Termcap- Namen zu verwenden, und die-r
Option weist an, Terminfo- Funktionen in das Termcap-Format zu übersetzen . Einige (wie die in verwendeten Ausdrückesgr
) werden nicht übersetzt undinfocmp
können auskommentierte Funktionen hinterlassen, wenn genügend Speicherplatz vorhanden ist.Mit "genügend Speicherplatz" wird die Tatsache bezeichnet, dass echte Termcap-Anwendungen in einer Beschreibung nur 1023 Byte zulassen. FreeBSD verwendet darunter ncurses, aber einige Anwendungen gehen von der Eintragslänge aus.
FreeBSD hat jedoch eine Termcap-Datei, die unabhängig von ncurses ist. Es gibt auch einen "Port" für Flüche, den einige nützlich finden.
Übrigens können Sie sich darauf beziehen: termite / termite.terminfo . Wenn Sie es übersetzt haben, sehen Sie möglicherweise so etwas
Der terminfo-Eintrag enthält einige Fehler (VTE unterstützt beispielsweise keinen Metamodus). Im Termcap-Format stellen Sie möglicherweise fest, dass die meisten Funktionstasten nicht mehr vorhanden sind (maximal 1023 Byte).
Weiterführende Literatur:
infocmp
- Terminfo-Beschreibungen vergleichen oder ausdruckeninfotocap
- Konvertieren Sie eine Terminfo-Beschreibung in eine Termcap-Beschreibungtctest
- Ein Termcap-Testdienstprogrammquelle
-T
Option von funktioniertinfocmp
möglicherweise für Sie, aber einige Anwendungen können nicht funktionieren.Manchmal müssen Sie einige manuelle Änderungen vornehmen, um die Dinge richtig zu übersetzen.
Ich habe die folgenden Änderungen vorgenommen, damit die "wichtigen" Teile der Beschreibung übersetzt werden.
Dadurch wurden 1001 Zeichen erreicht, ohne dass etwas "Wichtiges" geopfert wurde (insbesondere werden weiterhin 256 Farben unterstützt und der Text in der Titelleiste festgelegt).
Beachten Sie, dass alle eingerückten Zeilen Registerkarten zum Einrücken verwenden 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 der Termkappe 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:
(undCo#8
,pa#64
um übereinzustimmen).quelle
:AB=\E[48;5;%dm:AF=\E[38;5;%dm:
(oder:AB=\E[4%dm:AF=\E[3%dm:
für Terminals ohne 256 Farben) in der Termkappe, die für die meisten Terminals gleich ist und manuell hinzugefügt werden könnte, vorausgesetzt, es gibt genug Platz dafür. Aber ich mache mir auf keinen Fall Sorgen darüber, wer die akzeptierte Flagge bekommt, nur froh, dass ich bei Ihrem Problem helfen konnte.