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?
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?
Antworten:
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 hc
Hardcopy identifiziert Terminals (dh Drucker, Bildschirme nicht); co
ist die Anzahl der Spalten; md
Startet 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 md
Funktion 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 .lesskey
Datei 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_md
Variable 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 tput
Befehl 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 tput
Befehl 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 setaf
Funktion (oder AF
Termcap) , um die Ausgabe in Farbe anzuzeigen.
Die LESS_TERMCAP_*
Einstellungen werden in der LESS
Dokumentation nicht erwähnt . Die beste Referenz, die ich anbieten kann, ist meine Antwort hier .
LESS_TERMCAP_*
erfahren Sie, wie Sie alle Umgebungsvariablen mithilfe tput
von Escape-Zeichen festlegen .
Gilles Antwort ist ausgezeichnet, aber das hat mich neugierig gemacht:
Termcap ist weitgehend veraltet und wurde durch Terminfo ersetzt
Wenn Termcap veraltet ist, möchte ich zu Terminfo wechseln
Ich möchte auch von Termcap abschalten, weil ich einen Fehler gefunden habe. Angenommen, Sie haben eine termcap-Variable in Ihre ~/.profile
oder 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 ~/.profile
oder ähnlich:
TERM=xterm-pretty