Veo estos bonitos colores en las páginas de manual vistas con menos cuando configuro un montón de estas variables. ¿Qué quieren decir, dónde está la documentación? ¿Esto es interpretado por less o termcap?
Veo estos bonitos colores en las páginas de manual vistas con menos cuando configuro un montón de estas variables. ¿Qué quieren decir, dónde está la documentación? ¿Esto es interpretado por less o termcap?
Respuestas:
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, hc
identifica terminales de copia impresa (es decir, impresoras, no pantallas); co
es el número de columnas; md
comienza 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 md
capacidad. 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 .lesskey
archivo . 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_md
variable. 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 tput
comando 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 tput
comando 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 setaf
capacidad (o AF
con Termcap).
La LESS_TERMCAP_*
configuración no se menciona en la LESS
documentación. La mejor referencia que puedo ofrecer es mi respuesta aquí .
LESS_TERMCAP_*
entornos utilizando en tput
lugar de caracteres de escape.
La respuesta de Gilles es excelente, pero esto me hizo sentir curiosidad:
Termcap es en gran parte obsoleto, ya que Terminfo lo reemplazó
Si Termcap está obsoleto, quiero cambiar a Terminfo
También quiero cambiar de Termcap porque encontré un error. Digamos que pones una variable termcap en tu ~/.profile
o 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 ~/.profile
ao similar:
TERM=xterm-pretty