Colores en páginas de manual

63

Cuando miro una página de manual en mi 'consola' (no una xterm), veo un poco de coloración, pero no obtengo esto en mi xterm(por ejemplo konsole), ¿hay alguna forma de habilitar esto? ojalá una solución bastante simple?

xenoterracida
fuente

Respuestas:

78

Necesitas usar la termcap(5)función. La página de manual de algunos Unices dice que esta herramienta está obsoleta y que se debe usar terminfo, pero aún está disponible en otros (y terminfoes más complicada).

Más importante aún, los lessusos termcap.


Establecer colores para less

Hago lo siguiente para que lessy man(que utiliza less) tenga color:

$ 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

Y luego en mi ~/.bashrc, hago esto:

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

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

NOTA: ¿ Ver documentación sobre LESS_TERMCAP_*variables? por cómo funciona esto.

El resultado final

    ss de la página man

Stefan Lasiewski
fuente
77
Creo que la razón por la que esto funciona de la manera que lo hace, es porque 'consola' traduce 'subrayado' en color, mientras que X11 admite subrayados. Puede probar esta teoría escribiendo echo -e "\e[04mhello world\e[0m"tanto la consola como su terminal X11 y viendo la diferencia. Entonces, este truco anterior abusa de termcap para mentir MENOS sobre qué códigos necesita emitir para negrita / subrayado y lo obliga a producir códigos de escape de color.
Kent Fredric
77
De hecho, la traducción del subrayado al azul tiene razones históricas, volviendo a los modos de texto de los adaptadores gráficos originales para PC MDA y CGA (en realidad, los modos de texto CGA todavía están disponibles hasta la fecha). Esos adaptadores gráficos almacenaron dos bytes por carácter: uno con el código ASCII y otro con los atributos. El MDA interpretó el byte de atributo como combinaciones de subrayado, brillante, parpadeante e inverso, mientras que el CGA interpretó ese byte como color de primer plano y de fondo. Y sucedió que el atributo MDA para subrayado es igual al atributo CGA para azul sobre negro.
celtschk
3
Esto no funciona en Konsole o Gnome-terminal. Los configuré y el único cambio de color es para el cursor y la página de estado. Me resulta que necesito: export GROFF_NO_SGR=1.
CMCDragonkai
2
Eso es un montón de subcapas creadas. ¿Cuál es la ventaja sobre este enfoque más simple ?
Tom Hale
1
@TomHale, principalmente compatibilidad entre sistemas / terminales (y la capacidad de compartir el script con otros de una manera que no sea ambigua). Si alguna vez se encuentra trabajando en una caja que usa diferentes códigos de control, y scp / rsync su perfil de shell, cuando los códigos de control están codificados como en ese ejemplo, puede que no funcionen como se esperaba en el destino máquina, y podría terminar con una salida confusa. Por supuesto, si el script solo se ejecutará en una o dos máquinas conocidas / terminal-emus, entonces el enfoque codificado está bien.
Mark G.
15

Puede resolver este problema utilizando un buscapersonas diferente, por ejemplo most. manen realidad usará el programa especificado en la PAGERvariable de entorno. Desde la página de manual man (1) :

MANPAGER, PAGER

Si $ MANPAGER o $ PAGER está configurado ($ MANPAGER se usa con preferencia), su valor se usa como el nombre del programa usado para mostrar la página del manual. Por defecto, se usa pager -s.

El valor puede ser un nombre de comando simple o un comando con argumentos, y puede usar comillas (barras invertidas, comillas simples o comillas dobles).

Es posible que no use tuberías para conectar varios comandos; si lo necesita, use un script de contenedor, que puede tomar el archivo para mostrarlo como argumento o como entrada estándar.

Si mostestá instalado en su sistema, intente esto antes de iniciar man:

export PAGER=most
primates enlatados
fuente
2
mostdebe instalarse, para que esto funcione.
enzotib
3
mosttiene combinaciones de teclas extrañas ... que no son configurables.
Mateen Ulhaq
10

Los subrayados predeterminados lastiman mis ojos. Esta configuración mejora enormemente la manlectura de mi página:

Ejemplo de página man de color

Agregue lo siguiente en su `~ .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

Para ganar, combine con export MANPAGER='less -s -M +Gg' (fuente) para mostrar su porcentaje en el documento.

Tom Hale
fuente
3
Como @CMCDragonkai mencionó en un comentario sobre otra respuesta, esto requiere export GROFF_NO_SGR=1trabajar en algunos emuladores de terminal.
Ben
1
¡¡Por la victoria!! Me encanta el% display export MANPAGER='less -s -M +Gg'agrega.
MikeyE
5

Si usa Oh My Zsh , puede agregar colored-man-pagesa la pluginsmatriz en su .zshrcarchivo.

tembloroso
fuente
3

Guardar 'más' persistentemente

Terminal abierta ( Ctrl+ Alt+ T)

  1. Instalar 'la mayoría'.

    sudo apt-get install most
    
  2. edite .bashrc, escriba:

    nano ~/.bashrc
    
  3. Agregue estas líneas:

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

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

  5. Actualizar

    source ~/.bashrc
    
  6. Prueba

    man ln
    

Esto también funciona en xterm.

Denis Griffin
fuente
para evitar abrir nano, puede agregar bashrc desde la terminal: sudo apt install most; echo "export PAGER = 'most'" >> ~ / .bashrc; source ~ / .bashrc
Será el
1

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

Extracto:

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

Ahora obtenga la terminfodescripción (guarde lo siguiente como 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, 

Ahora compílelo usando tic(el compilador de descripción de entrada terminfo):

$ tic mostlike.txt

(Es posible que desee eliminar el mostlike.txtarchivo después de la compilación).

Y luego simplemente defina un alias en el *rcarchivo de su shell favorito.

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

Si desea modificar el archivo terminfo, úselo infocmp mostlikepara obtener el contenido más adelante.

dirtybit
fuente
11
Es útil resumir la fuente aquí, para que las personas puedan ver lo que dice sin tener que hacer clic (y en caso de que el sitio se caiga)
Michael Mrozek
3
Proporcione respuestas, no solo enlaces a respuestas. Sin embargo, es muy bueno proporcionar enlaces que respalden su respuesta. Imagine que estaba buscando en Google esta pregunta: una buena respuesta en StackExchange encontrará rápidamente su camino a la primera página de resultados.
Stefan Lasiewski
El enlace está muerto.
farzan
Encontré esto en mostlike.txtlínea.
Kaushal Modi
¿Cómo se ve la salida?
Tom Hale
1

Tomando la respuesta de dirtybit , quería cambiar el color de los resultados de búsqueda resaltados. Esto se llama "modo destacado", aquí hay un archivo de ejemplo "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,

Compila e instala el archivo:

tic xterm-yellow.ti

Agregue una línea a "~ / .profile" o similar:

TERM=xterm-yellow
Steven Penny
fuente