¿Documentación sobre LESS_TERMCAP_ * variables?

Respuestas:

45

Termcap es una biblioteca que Less usa para acceder al terminal. Termcap es en gran parte obsoleto, ya que Terminfo lo reemplazó , pero Terminfo ofrece una interfaz de compatibilidad de Termcap para las aplicaciones. Menos es el contenido con la interfaz Termcap y lo usa.

La biblioteca Termcap es una descripción de las instalaciones de la terminal. Cada instalación se identifica mediante un código de dos letras (o más generalmente dos caracteres). Por ejemplo, hcidentifica terminales de copia impresa (es decir, impresoras, no pantallas); coes el número de columnas; mdcomienza a mostrar texto en negrita. Cada capacidad tiene un valor, que puede ser un booleano (como con hc), un entero (como con co) o una cadena (como con md). Muchas de las cadenas son secuencias de escape que las aplicaciones pueden enviar al terminal para lograr un cierto efecto.

¿Por qué escapar secuencias? Debido a que la interfaz entre el terminal y la aplicación es una secuencia de caracteres (más precisamente, una secuencia de caracteres en cada dirección: una para la entrada del usuario, otra para la salida para mostrar). Cuando una aplicación escribe un carácter en el terminal, generalmente se muestra. Algunos caracteres tienen un comportamiento diferente: son caracteres de control, que hacen cosas como mover el cursor, cambiar los atributos de visualización, etc. Hay muchos más comandos que caracteres de control, por lo que se accede a la mayoría de los comandos mediante secuencias de escape, que comienzan con un carácter especial (a menudo el carácter de escape, de ahí el nombre).

Por ejemplo, cuando Less quiere mostrar texto en negrita, busca el valor de la mdcapacidad. Esta es una cadena, que Less escribe en el terminal. El terminal reconoce esta cadena como una secuencia de escape y ajusta su estado interno para que los caracteres posteriores se muestren en negrita.

En los primeros días de los terminales de hardware, diferentes marcas tenían diferentes secuencias de escape y capacidades; La base de datos y la interfaz de Termcap se inventaron para que las aplicaciones no tuvieran que saber sobre cada modelo de terminal. Hoy en día, la mayoría de los emuladores de terminal tienen capacidades muy similares, pero la base de datos Termcap o Terminfo sigue siendo útil para hacer frente a pequeñas diferencias.

Las LESS_TERMCAP_*variables se pueden establecer en el entorno o en el .lesskeyarchivo . Proporciona Less con valores alternativos para las capacidades de Terminal. Cuando Less quiere usar una capacidad de terminal, digamos cambiar a negrita, primero verifica si hay una LESS_TERMCAP_mdvariable. Si esta variable existe, Less usa su valor como la secuencia de escape para cambiar a negrita. Si no, utiliza el valor de la base de datos Termcap. Este mecanismo permite al usuario anular la configuración de la base de datos Termcap por Less.

Las LESS_TERMCAP_*configuraciones más útiles son las secuencias de escape. Puede asignar atributos a diferentes atributos. Puede utilizar el tputcomando para buscar el valor de una capacidad para el terminal actual en el sistema de Termcap o terminfo base de datos. Puede usar secuencias de escape directamente si no le importa ser dependiente de la terminal. Por ejemplo, esta configuración le dice a Less que se muestre en negrita cuando se le indique que se muestre en negrita:

LESS_TERMCAP_md=$(tput md; tput AF 1)

o si su tputcomando no admite nombres de Termcap:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

El hombre envía menos texto con un formato muy simple que solo puede expresar negrita y cursiva. Además, Less utiliza varias capacidades de formato para su uso interno, como resaltar los resultados de búsqueda y mostrar la línea de modo en la parte inferior. Estas son algunas de las secuencias de escape que Less usa (solo enumero capacidades que son razonablemente útiles para reasignar):

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

Para mostrar la salida en color, use la setafcapacidad (o AFcon Termcap).

La LESS_TERMCAP_*configuración no se menciona en la LESSdocumentación. La mejor referencia que puedo ofrecer es mi respuesta aquí .

Gilles 'SO- deja de ser malvado'
fuente
8
Gracias. También miré brevemente el código fuente de less y descubrí que cuando configura LESS_TERMCAP_DEBUG en algo y luego abre man, puede ver algo como la fuente de las páginas man y en él todas las etiquetas de capacidad que se utilizan. Hace que sea más fácil decidir en qué desea configurarlos.
anselm
1
Vea esta respuesta sobre cómo configurar todos los LESS_TERMCAP_*entornos utilizando en tputlugar de caracteres de escape.
Kaushal Modi
3

La respuesta de Gilles es excelente, pero esto me hizo sentir curiosidad:

Termcap es en gran parte obsoleto, ya que Terminfo lo reemplazó

  1. Si Termcap está obsoleto, quiero cambiar a Terminfo

  2. También quiero cambiar de Termcap porque encontré un error. Digamos que pones una variable termcap en tu ~/.profileo similar:

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

    Después de eso, si ingresa set, las variables Termcap alteran su salida de color.

Para cambiar a Terminfo, puede hacer un archivo 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,

Compila e instala el archivo:

tic xterm-pretty.ti

Agregar línea ~/.profileao similar:

TERM=xterm-pretty
Steven Penny
fuente