Dokumentation zu LESS_TERMCAP_ * -Variablen?

38

Ich sehe diese hübschen Farben in Manpages, die mit weniger angezeigt werden, wenn einige dieser Variablen gesetzt werden. Was bedeuten sie, wo ist die Dokumentation? Wird dies von less oder termcap interpretiert?

Bildschirmfoto

ss von man page

Anselm
quelle

Antworten:

45

Termcap ist eine Bibliothek, mit der Less auf das Terminal zugreift . Termcap ist weitgehend veraltet und wurde durch Terminfo ersetzt . Terminfo bietet jedoch eine Termcap-Kompatibilitätsschnittstelle für Anwendungen. Less ist mit der Termcap-Oberfläche zufrieden und nutzt diese.

Die Termcap-Bibliothek beschreibt die Ausstattung des Terminals. Jede Einrichtung ist durch einen aus zwei Buchstaben (oder allgemeiner aus zwei Zeichen bestehenden) Code gekennzeichnet. Zum Beispiel hcHardcopy identifiziert Terminals (dh Drucker, Bildschirme nicht); coist die Anzahl der Spalten; mdStartet die Anzeige von fettem Text. Jede Fähigkeit hat einen Wert, der ein Boolescher Wert (wie bei hc), ein Integerwert (wie bei co) oder ein Stringwert (wie bei md) sein kann. Viele der Zeichenfolgen sind Escape-Sequenzen, die Anwendungen an das Terminal senden können, um einen bestimmten Effekt zu erzielen.

Warum Fluchtsequenzen? Weil die Schnittstelle zwischen dem Terminal und der Anwendung ein Zeichenstrom ist (genauer gesagt, ein Zeichenstrom in jede Richtung: einer für Benutzereingaben, einer für Ausgaben zur Anzeige). Wenn eine Anwendung ein Zeichen in das Terminal schreibt, wird es normalerweise angezeigt. Einige Zeichen haben ein anderes Verhalten: Es handelt sich um Steuerzeichen, die den Cursor bewegen, die Anzeigeattribute wechseln usw. Es gibt viel mehr Befehle als Steuerzeichen, sodass auf die meisten Befehle über Escape-Sequenzen zugegriffen wird, die mit beginnen ein Sonderzeichen (oft das Escape-Zeichen, daher der Name).

Wenn Less beispielsweise einen fett gedruckten Text anzeigen möchte, wird der Wert der mdFunktion nachgeschlagen. Dies ist eine Zeichenfolge, die Less in das Terminal schreibt. Das Terminal erkennt diese Zeichenfolge als Escape-Sequenz und passt ihren internen Status so an, dass nachfolgende Zeichen fett dargestellt werden.

In den Anfängen der Hardware-Terminals hatten verschiedene Marken unterschiedliche Fluchtsequenzen und -fähigkeiten. Die Termcap-Datenbank und -Schnittstelle wurden erfunden, damit die Anwendungen nicht über jedes Terminalmodell Bescheid wissen müssen. Heutzutage haben die meisten Terminalemulatoren ähnliche Funktionen, aber die Termcap- oder Terminfo-Datenbank ist immer noch nützlich, um kleinere Unterschiede zu bewältigen.

Die LESS_TERMCAP_*Variablen können in der Umgebung oder in der .lesskeyDatei eingestellt werden . Sie bietet Less alternative Werte für die Terminalfunktionen. Wenn Less eine Terminalfunktion verwenden möchte, z. B. switch to bold, wird zuerst geprüft, ob eine LESS_TERMCAP_mdVariable vorhanden ist. Wenn diese Variable existiert, verwendet Less ihren Wert als Escape-Sequenz, um in Fettdruck zu wechseln. Andernfalls wird der Wert aus der Termcap-Datenbank verwendet. Mit diesem Mechanismus kann der Benutzer die Termcap-Datenbankeinstellungen für Less überschreiben.

Die nützlichsten LESS_TERMCAP_*Einstellungen sind Escape-Sequenzen. Sie können Attribute verschiedenen Attributen zuordnen. Mit dem tputBefehl können Sie den Wert einer Funktion für das aktuelle Terminal in der Termcap- oder Terminfo- Datenbank des Systems abrufen . Sie können Escape-Sequenzen direkt verwenden, wenn Sie nichts dagegen haben, terminalabhängig zu sein. Beispielsweise weist diese Einstellung Less an, fett rot anzuzeigen, wenn sie angewiesen wird, fett anzuzeigen:

LESS_TERMCAP_md=$(tput md; tput AF 1)

oder wenn Ihr tputBefehl keine Termcap-Namen unterstützt:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

Man sendet Less-Text mit einer sehr einfachen Formatierung, die nur Fett- und Kursivschrift ausdrücken kann. Darüber hinaus verwendet Less verschiedene Formatierungsfunktionen für die interne Verwendung, z. B. um Suchergebnisse hervorzuheben und die Moduszeile unten anzuzeigen. Hier sind einige der Escape-Sequenzen, die Less verwendet (ich liste nur Funktionen auf, deren Neuzuordnung sinnvoll ist):

termcap terminfo  
ks      smkx      make the keypad send commands
ke      rmkx      make the keypad send digits
vb      flash     emit visual bell
mb      blink     start blink
md      bold      start bold
me      sgr0      turn off bold, blink and underline
so      smso      start standout (reverse video)
se      rmso      stop standout
us      smul      start underline
ue      rmul      stop underline

Verwenden Sie die setafFunktion (oder AFTermcap) , um die Ausgabe in Farbe anzuzeigen.

Die LESS_TERMCAP_*Einstellungen werden in der LESSDokumentation nicht erwähnt . Die beste Referenz, die ich anbieten kann, ist meine Antwort hier .

Gilles 'SO - hör auf böse zu sein'
quelle
8
Vielen Dank. Ich habe mir auch kurz den Quellcode von less angesehen und festgestellt, dass, wenn Sie LESS_TERMCAP_DEBUG auf etwas setzen und dann man öffnen, Sie so etwas wie den Quellcode von Manpages und darin alle verwendeten Capability-Tags sehen können. Erleichtert die Entscheidung, worauf Sie sie einstellen möchten.
Anselm
1
In dieser AntwortLESS_TERMCAP_* erfahren Sie, wie Sie alle Umgebungsvariablen mithilfe tputvon Escape-Zeichen festlegen .
Kaushal Modi
3

Gilles Antwort ist ausgezeichnet, aber das hat mich neugierig gemacht:

Termcap ist weitgehend veraltet und wurde durch Terminfo ersetzt

  1. Wenn Termcap veraltet ist, möchte ich zu Terminfo wechseln

  2. Ich möchte auch von Termcap abschalten, weil ich einen Fehler gefunden habe. Angenommen, Sie haben eine termcap-Variable in Ihre ~/.profileoder eine ähnliche Variable eingefügt :

    export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
    export LESS_TERMCAP_se=$(printf '\33[m')
    

    Danach, wenn Sie eingeben set, bringen die Termcap-Variablen Ihre Farbausgabe durcheinander.

Um zu Terminfo zu wechseln, können Sie eine Datei erstellen xterm-pretty.ti:

xterm-pretty|xterm with pretty colors,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

Kompilieren und installieren Sie die Datei:

tic xterm-pretty.ti

Zeile hinzufügen zu ~/.profileoder ähnlich:

TERM=xterm-pretty
Steven Penny
quelle