Couleurs dans les pages de manuel

63

Lorsque je regarde une page de manuel dans ma "console" (et non une xterm), je vois une coloration, mais je ne la vois pas dans mon xterm(par exemple konsole) . Est-il possible de l'activer? espérons une solution assez simple?

xénoterracide
la source

Réponses:

78

Vous devez utiliser la termcap(5)fonctionnalité. La page de manuel de certains Unices indique que cet outil est obsolète et à utiliser terminfo, mais il est toujours disponible sur d' autres (et terminfoplus compliqué).

Plus important encore, lessutilise termcap.


Réglage des couleurs pour less

Je fais ce qui suit pour que lesset man(qui utilise less) aura de la couleur:

$ 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

Et puis dans mon ~/.bashrc, je fais ceci:

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

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

REMARQUE: voir la documentation sur les LESS_TERMCAP_*variables? pour comment cela fonctionne.

Le résultat final

    ss of man page

Stefan Lasiewski
la source
7
Je pense que la raison pour laquelle cela fonctionne ainsi, c'est parce que 'console' traduit 'soulignement' en couleur, là où X11 prend en charge le soulignement. Vous pouvez tester cette théorie en saisissant echo -e "\e[04mhello world\e[0m"à la fois la console et votre terminal X11 et en constatant la différence. Donc , ce hack ci - dessus abus TERMCAP mentir moins sur ce que les codes dont il a besoin d'émettre pour le gras / souligné et l' oblige à produire des codes d'échappement de couleur au lieu.
Kent Fredric
7
En effet, la traduction du soulignement en bleu a des raisons historiques, remontant aux modes de texte des adaptateurs graphiques PC d'origine MDA et CGA (en fait, les modes de texte CGA sont toujours disponibles à ce jour). Ces cartes graphiques stockées deux octets par caractère: l'une contenant le code ASCII, l'autre contenant les attributs. La MDA a interprété l'octet d'attribut comme une combinaison de soulignement, de brillant, de clignotement et d'inverse, tandis que le CGA a interprété cet octet comme une couleur de premier plan et d'arrière-plan. Et il est arrivé que l'attribut MDA pour le soulignement soit égal à l'attribut CGA pour le bleu sur noir.
celtschk
3
Cela ne fonctionne pas dans Konsole ou Gnome-terminal. Je les ai définies et le seul changement de couleur concerne le curseur et la page d'état. Je tourne sur j'ai besoin: export GROFF_NO_SGR=1.
CMCDragonkai
2
Cela fait beaucoup de sous-coquilles créées. Quel est l'avantage sur cette approche plus simple ?
Tom Hale
1
@TomHale, principalement la compatibilité inter-systèmes / terminaux (et la possibilité de partager le script avec d'autres d'une manière non ambiguë). Si vous travaillez sur une boîte qui utilise différents codes de contrôle et que vous scp / rsync votre profil de shell dessus, lorsque les codes de contrôle sont tous codés en dur comme dans cet exemple, ils risquent de ne pas fonctionner comme prévu sur la destination. machine, et vous pourriez vous retrouver avec une sortie tronquée. Bien sûr, si le script ne doit être exécuté que sur une ou deux machines / terminal-émus connus, l'approche codée en dur convient parfaitement.
Mark G.
15

Vous pouvez résoudre ce problème en utilisant un autre téléavertisseur, par exemple most. manutilisera réellement le programme spécifié dans la PAGERvariable d'environnement. De la page de manuel man (1) :

MANPAGER, PAGER

Si $ MANPAGER ou $ PAGER est défini ($ MANPAGER est utilisé de préférence), sa valeur est utilisée comme nom du programme utilisé pour afficher la page de manuel. Par défaut, le pager -s est utilisé.

La valeur peut être un simple nom de commande ou une commande avec des arguments, et peut utiliser des guillemets shell (barres obliques inverses, guillemets simples ou doubles).

Il ne peut pas utiliser de tuyaux pour connecter plusieurs commandes; si vous en avez besoin, utilisez un script d'encapsulation, qui peut afficher le fichier sous forme d'argument ou sur une entrée standard.

Si mostest installé sur votre système, essayez ceci avant de lancer man:

export PAGER=most
conserves
la source
2
mostdevrait être installé, pour que cela fonctionne.
enzotib
3
mosta des combinaisons de touches étranges ... qui ne sont pas configurables.
Mateen Ulhaq
10

Le défaut souligne mal mes yeux. Cette configuration améliore grandement ma manlecture de page:

Exemple de page de manuel colorée

Ajoutez ce qui suit dans votre `~ .bashrc ':

# 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

Pour gagner, combinez avec export MANPAGER='less -s -M +Gg' (source) pour afficher votre pourcentage dans le document.

Tom Hale
la source
3
Comme @CMCDragonkai a mentionné dans un commentaire sur une autre réponse, cela nécessite export GROFF_NO_SGR=1de travailler sur certains émulateurs de terminaux.
Ben
1
Pour la victoire!! J'aime le% display export MANPAGER='less -s -M +Gg'ajoute.
MikeyE
5

Si vous utilisez Oh My Zsh , vous pouvez ajouter colored-man-pagesau pluginstableau de votre .zshrcfichier.

tremby
la source
3

Enregistrer 'le plus' de manière persistante

Terminal ouvert ( Ctrl+ Alt+ T)

  1. Installez 'le plus'.

    sudo apt-get install most
    
  2. modifier .bashrc, tapez:

    nano ~/.bashrc
    
  3. Ajoutez ces lignes:

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

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

  5. Rafraîchir

    source ~/.bashrc
    
  6. Tester

    man ln
    

Cela fonctionne aussi dans xterm.

Denis Griffin
la source
pour éviter d'ouvrir nano, vous pouvez ajouter à bashrc depuis le terminal: sudo apt install most; echo "export PAGER = 'most'" >> ~ / .bashrc; source ~ / .bashrc
Will
1

Tiré de http://nion.modprobe.de/blog/archives/569-colored-manpages.html

Extrait:

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

Maintenant, obtenez la terminfodescription (enregistrez le suivant sous le nom 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, 

Maintenant, compilez-le en utilisant tic(le compilateur terminfo entry-description):

$ tic mostlike.txt

(Vous voudrez peut-être supprimer le mostlike.txtfichier après la compilation.)

Et ensuite, définissez un alias dans le *rcfichier de votre shell préféré.

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

Si vous souhaitez modifier le fichier terminfo, utilisez-le infocmp mostlikepour en obtenir le contenu ultérieurement.

peu sale
la source
11
Cela aide si vous résumez la source ici, afin que les gens puissent voir ce qui est dit sans avoir à cliquer (et au cas où le site tomberait jamais)
Michael Mrozek
3
Veuillez fournir des réponses, pas seulement des liens vers des réponses. C'est très bien de fournir des liens qui appuient votre réponse, cependant. Imaginez que je suis allé sur Google pour cette question --- une bonne réponse chez StackExchange trouvera rapidement son chemin vers la première page de résultats.
Stefan Lasiewski
Le lien est mort.
Farzan
Trouvé ceci en mostlike.txtligne.
Kaushal Modi
À quoi ressemble la sortie?
Tom Hale
1

Prenant la réponse de dirtybit , je voulais changer la couleur des résultats de recherche en surbrillance. Cela s'appelle le "mode standout", voici un exemple de fichier "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,

Compiler et installer le fichier:

tic xterm-yellow.ti

Ajouter une ligne à "~ / .profile" ou similaire:

TERM=xterm-yellow
Steven Penny
la source