Farben in Manpages

63

Wenn ich eine Manpage in meiner 'Konsole' ansehe (nicht an xterm), sehe ich eine Färbung, aber ich bekomme diese nicht in meiner xterm(zB konsole) Gibt es eine Möglichkeit, dies zu aktivieren? hoffentlich eine recht einfache lösung?

Xenoterracid
quelle

Antworten:

78

Sie müssen die termcap(5)Funktion verwenden. Die Manpage auf einigen Unices besagt, dass dieses Tool veraltet und zu verwenden ist terminfo, aber auf anderen immer noch verfügbar ist (und terminfokomplizierter ist).

Noch wichtiger ist, lessverwendet termcap.


Farben einstellen für less

Ich mache das Folgende, damit lessund man(welche verwendet less) Farbe haben:

$ cat ~/.LESS_TERMCAP 
export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green
export LESS_TERMCAP_md=$(tput bold; tput setaf 6) # cyan
export LESS_TERMCAP_me=$(tput sgr0)
export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4) # yellow on blue
export LESS_TERMCAP_se=$(tput rmso; tput sgr0)
export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 7) # white
export LESS_TERMCAP_ue=$(tput rmul; tput sgr0)
export LESS_TERMCAP_mr=$(tput rev)
export LESS_TERMCAP_mh=$(tput dim)
export LESS_TERMCAP_ZN=$(tput ssubm)
export LESS_TERMCAP_ZV=$(tput rsubm)
export LESS_TERMCAP_ZO=$(tput ssupm)
export LESS_TERMCAP_ZW=$(tput rsupm)
export GROFF_NO_SGR=1         # For Konsole and Gnome-terminal

Und dann ~/.bashrcmache ich in meinem :

# Get color support for 'less'
export LESS="--RAW-CONTROL-CHARS"

# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP

HINWEIS: Siehe Dokumentation zu LESS_TERMCAP_*Variablen? dafür, wie das funktioniert.

Das Endergebnis

    ss von man page

Stefan Lasiewski
quelle
7
Ich glaube, der Grund, warum dies so funktioniert, ist, dass "Konsole" "Unterstreichung" in Farbe übersetzt, wobei X11-Zeug Unterstreichungen unterstützt. Sie können diese Theorie testen, indem Sie echo -e "\e[04mhello world\e[0m"sowohl die Konsole als auch Ihr X11-Terminal eingeben und den Unterschied feststellen . Dieser obige Hack missbraucht termcap, um WENIGER darüber zu belügen, welche Codes für Fettdruck / Unterstreichung ausgegeben werden müssen, und zwingt es stattdessen, Farb-Escape-Codes zu erstellen.
Kent Fredric
7
In der Tat hat die Übersetzung von Unterstreichung in Blau historische Gründe und geht auf die Textmodi der ursprünglichen PC-Grafikadapter MDA und CGA zurück (tatsächlich sind die CGA-Textmodi noch verfügbar). Diese Grafikkarten haben zwei Bytes pro Zeichen gespeichert: eines mit dem ASCII-Code und eines mit den Attributen. Der MDA interpretierte das Attributbyte als eine Kombination aus Unterstreichung, Helligkeit, Blinken und Umkehrung, während der CGA dieses Byte als Vordergrund- und Hintergrundfarbe interpretierte. Und es kam vor, dass das MDA-Attribut für Unterstreichung dem CGA-Attribut für Blau auf Schwarz entsprach.
Celtschk
3
Dies funktioniert nicht in Konsole oder Gnome-Terminal. Ich habe sie eingestellt und die einzige Farbänderung betrifft den Cursor und die Statusseite. Ich stellte sich heraus , ich brauche: export GROFF_NO_SGR=1.
CMCDragonkai
2
Das sind viele Unterschalen. Was ist der Vorteil gegenüber diesem einfacheren Ansatz ?
Tom Hale
1
@TomHale, hauptsächlich system- / terminalübergreifende Kompatibilität (und die Möglichkeit, das Skript auf eindeutige Weise mit anderen zu teilen). Wenn Sie jemals an einer Box arbeiten, die andere Steuercodes verwendet, und Sie Ihr Shell-Profil mit scp / rsync darauf synchronisieren, funktionieren die Steuercodes möglicherweise am Ziel nicht wie in diesem Beispiel beschrieben Maschine, und Sie könnten mit verstümmelten Ausgabe enden. Wenn das Skript nur auf einem oder zwei bekannten Rechnern / Terminal-Emus ausgeführt wird, ist der fest programmierte Ansatz natürlich in Ordnung.
Mark G.
15

Sie können dieses Problem beispielsweise mit einem anderen Pager lösen most. manwird tatsächlich das in der PAGERUmgebungsvariablen angegebene Programm verwenden . Aus der man (1) man Seite:

MANPAGER, PAGER

Wenn $ MANPAGER oder $ PAGER gesetzt ist ($ MANPAGER wird bevorzugt verwendet), wird sein Wert als Name des Programms verwendet, mit dem die Handbuchseite angezeigt wird. Standardmäßig wird Pager -s verwendet.

Der Wert kann ein einfacher Befehlsname oder ein Befehl mit Argumenten sein und Shell-Anführungszeichen (Backslashes, einfache Anführungszeichen oder doppelte Anführungszeichen) verwenden.

Es werden möglicherweise keine Pipes zum Verbinden mehrerer Befehle verwendet. Wenn Sie dies benötigen, verwenden Sie ein Wrapper-Skript, das die Anzeige der Datei entweder als Argument oder als Standardeingabe akzeptiert.

Wenn mostauf Ihrem System installiert, versuchen Sie Folgendes, bevor Sie es starten man:

export PAGER=most
Dosenprimaten
quelle
2
mostsollte installiert sein, damit dies funktioniert.
Enzotib
3
mosthat seltsame Tastenkombinationen ... die nicht konfigurierbar sind.
Mateen Ulhaq
10

Die voreingestellten Unterstreichungen verletzen meine Augen. Dieses Setup verbessert das manLesen meiner Seite erheblich :

Beispiel für eine farbige Manpage

Fügen Sie Folgendes in Ihr `~ .bashrc 'ein:

# Have less display colours
# from: https://wiki.archlinux.org/index.php/Color_output_in_console#man
export LESS_TERMCAP_mb=$'\e[1;31m'     # begin bold
export LESS_TERMCAP_md=$'\e[1;33m'     # begin blink
export LESS_TERMCAP_so=$'\e[01;44;37m' # begin reverse video
export LESS_TERMCAP_us=$'\e[01;37m'    # begin underline
export LESS_TERMCAP_me=$'\e[0m'        # reset bold/blink
export LESS_TERMCAP_se=$'\e[0m'        # reset reverse video
export LESS_TERMCAP_ue=$'\e[0m'        # reset underline
export GROFF_NO_SGR=1                  # for konsole and gnome-terminal

Kombinieren Sie für den Gewinn mit export MANPAGER='less -s -M +Gg' (Quelle) , um Ihren Prozentsatz im Dokument anzuzeigen.

Tom Hale
quelle
3
Wie @CMCDragonkai in einem Kommentar zu einer anderen Antwort erwähnt hat, müssen hierfür export GROFF_NO_SGR=1einige Terminalemulatoren verwendet werden.
Ben
1
Für den Sieg!! Ich liebe die% -Anzeige export MANPAGER='less -s -M +Gg'fügt hinzu.
MikeyE
5

Wenn Sie Oh My Zsh verwenden , können Sie colored-man-pagesdem pluginsArray in Ihrer .zshrcDatei hinzufügen .

tremby
quelle
3

Speichern Sie "am meisten" dauerhaft

Terminal öffnen ( Ctrl+ Alt+ T)

  1. Installieren Sie 'most'.

    sudo apt-get install most
    
  2. edit .bashrc, tippe:

    nano ~/.bashrc
    
  3. Fügen Sie diese Zeilen hinzu:

    # color man-pages persistently
    export PAGER='most'
    
  4. sparen

    ( Ctrl+ O) -> Enter-> ( Ctrl+ X)

  5. Aktualisierung

    source ~/.bashrc
    
  6. Prüfung

    man ln
    

Dies funktioniert auch in xterm.

Denis Griffin
quelle
Um das Öffnen von nano zu vermeiden, können Sie bashrc vom Terminal aus anhängen: sudo apt install most; echo "export PAGER = 'most'" >> ~ / .bashrc; source ~ / .bashrc
Will
1

Entnommen aus http://nion.modprobe.de/blog/archives/569-colored-manpages.html

Auszug:

$ mkdir ~/.terminfo/ && cd ~/.terminfo

terminfoHolen Sie sich nun die Beschreibung (speichern Sie die folgende Datei als mostlike.txt):

# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-pcolor
mostlike|manpages with color looking like most, 
    am, hs, km, mir, msgr, xenl, 
    cols#80, it#8, lines#24, wsl#40, 
    acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, 
    bel=^G, bold=\E[1m\E[31m, clear=\E[H\E[2J, cr=^M, 
    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, 
    cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, 
    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, 
    dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, 
    dsl=\E]0;\007, ed=\E[J, el=\E[K, enacs=\E)0, fsl=^G, 
    home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, 
    is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, kbs=^H, 
    kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, 
    kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, 
    kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, 
    kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, 
    kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, 
    kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, 
    kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, 
    kslt=\E[4~, rc=\E8, rev=\E[7m\E[34m, ri=\EM, rmacs=^O, 
    rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, 
    rmso=\E[m, rmul=\E[m, 
    rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>, sc=\E7, 
    sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h, 
    smkx=\E[?1h\E=, smso=\E[1;30m\E[47m, smul=\E[32m, 
    tbc=\E[3g, tsl=\E]0;, u6=\E[%i%d;%dR, u7=\E[6n, 
    u8=\E[?1;2c, u9=\E[c, 

Jetzt kompiliere es mit tic(dem terminfo entry-description compiler):

$ tic mostlike.txt

(Möglicherweise möchten Sie die mostlike.txtDatei nach dem Kompilieren löschen .)

Und dann definieren Sie einfach einen Alias ​​in der *rcDatei Ihrer Lieblingsshell.

$ alias man="TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man"

Wenn Sie die terminfo-Datei ändern möchten, verwenden Sie infocmp mostlike, um den Inhalt später abzurufen .

Dirtybit
quelle
11
Es hilft, wenn Sie die Quelle hier zusammenfassen, damit die Leute sehen können, was darin steht, ohne durchklicken zu müssen (und falls die Site jemals ausfällt)
Michael Mrozek
3
Bitte geben Sie Antworten, nicht nur Links zu Antworten. Es ist jedoch sehr gut, Links bereitzustellen, die Ihre Antwort unterstützen. Stellen Sie sich vor, ich habe nach dieser Frage gegoogelt - eine gute Antwort bei StackExchange findet schnell den Weg zur ersten Ergebnisseite.
Stefan Lasiewski
Der Link ist tot.
Farzan
Fand dies mostlike.txtonline.
Kaushal Modi
Wie sieht die Ausgabe aus?
Tom Hale
1

Unter dirtybit Antwort , wollte ich die Farbe der markierten Suchergebnisse ändern. Dies nennt man "Standout-Modus", hier eine Beispieldatei "xterm-yellow.ti":

xterm-yellow|yellow standout mode,
# 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-yellow.ti

Zeile zu "~ / .profile" oder ähnlichem hinzufügen:

TERM=xterm-yellow
Steven Penny
quelle