Introducción
Mi pregunta surge de la necesidad de comprender por qué tengo ahora (después de varias pruebas) Terminal y tmux que admiten 256 colores y tput colors
me dicen que solo hay 8 de ellos.
Antecedentes
Vamos a empezar desde el principio.
Estoy usando una caja de Ubuntu , Guake , tmux , Vim y me encanta el tema Solarizado . Se veían bastante horribles, así que decidí habilitar el soporte de 256 colores y jugar un poco.
Veamos qué pasa con mi Terminal . tput colors
dice que hay 8 colores. Personalmente los puse en púrpura, a la izquierda, y por supuesto a la derecha tenemos 2 tonos de azul diferentes. $TERM
dice xterm
. (Tener el color ls
I eval
this en mi .bashrc
.)
Vim también se ve bien, a pesar del hecho de que lo llamo con la 256
bandera en un entorno donde no se admiten 256 colores .
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
El único tipo que se queja del espacio de color reducido es tmux . Llamar tmux
proporciona los resultados esperados "incorrectos".
Pero llamar tmux
con la -2
bandera hace que todo funcione bien, mágicamente .
Ahora lo único que entiendo es que -2
es equivalente a export TERM=screen-256color
( fuente ).
Guake se comporta de manera análoga a Terminal y ambos responden xterm
a la pregunta echo $TERM
.
Pregunta
Básicamente, ¿alguien entiende por qué todo funciona incluso si no debería?
- ¿Soy sádico porque me quejo por qué las cosas funcionan? Tal vez.
- ¿Hay una mejor razón? Claro: me gustaría arreglar la apariencia de otras cajas de Ubuntu en mi oficina, y me gustaría entender por qué las cosas funcionan o no.
Experimentos adicionales
Ejecutar este script (ligeramente modificado) en mi xterm
proporciona el siguiente resultado: 256 colores, pero solo 16 se muestran correctamente.
Luego, cambiando el perfil del terminal, también cambian estos 16 colores.
Más pruebas están siguiendo.
De izquierda a derecha, de arriba a abajo, tenemos un tema de color Solarizeddircolor
ansi-dark
y 256dark
, luego , un esquema de color predeterminado ( Tango ) dircolor
ansi-dark
y 256dark
.
Observación : en teoría, el esquema de color dircolor
ansi-dark
en Solarized debería coincidir estrechamente con el dircolor
256dark
. Esto no está sucediendo claramente para los archivos específicos enumerados. En cambio, esto sucede bastante cuando en el directorio de trabajo hay carpetas , archivos de texto y enlaces simbólicos . Conclusión : no se prestó mucha atención al codificar los 256dark
colores.
Conclusiones preliminares
xterm
admite 256 colores, a pesar de lo que tput colors
dice. Los programas pueden referirse a la ansi
paleta (personalizable por el usuario) o definir sus colores, eligiendo entre un total de 256 colores.
tput colors
es una prueba poco confiable. ¿Podrías revisar mis conclusiones preliminares ?tput colors
solo puede devolver un valor y en terminales que admiten cualquiera de 2,8,16,88 o 256 colores, solo se devuelve el primer valor (8 en su caso). Para obtener el verdadero valor, use el script de mi último comentario. ¿Qué devuelve eso?Respuestas:
Hay alguna información sobre el soporte de 256 colores en las preguntas frecuentes de tmux .
Lamentablemente, detectar la cantidad de colores que admite el terminal no es sencillo, por razones históricas. Consulte Verificar cuántos colores admite mi emulador de terminal para obtener una explicación. Esto significa que
Cuando estás en tmux, la terminal con la que estás interactuando es tmux. No es compatible con todas las secuencias de control de xterm. En particular, no admite la
OSC 4 ; …
secuencia de control para consultar o establecer valores de color. Debe usar eso mientras se ejecuta directamente en xterm, fuera de tmux.Si ejecuta
tmux -2
, tmux comienza con compatibilidad con 256 colores, incluso si no cree que su terminal admite 256 colores (lo cual es bastante común).Por defecto, tmux se anuncia a sí mismo como
screen
sin soporte de 256 colores. Puede cambiar el valor deTERM
in.tmux.conf
para indicar compatibilidad con 256 colores:Puedes usar
TERM=xterm-256color
oTERM=screen-256color
en Ubuntu. Estos valores solo causarán problemas si inicia sesión en una máquina remota que no tiene una entrada termcap / terminfo para estos nombres. Puede copiar las entradas a su directorio de inicio en la máquina remota; esto funciona con la mayoría de las implementaciones de terminfo modernas.fuente
xterm
fue capaz de mostrarme 256 colores a pesar de quetput colors
decía 8. Supongo que la respuesta a esta pregunta específica ha sido abordada por @terdon en sus comentarios a la pregunta misma.set -g default_terminal "screen-256color"
comando no es suficiente para habilitar los 256 colores en tmux . Necesitasalias tmux='export TERM=screen-256color; /usr/bin/tmux'
( referencia ).tmux -2
según mi párrafo anterior, si tmux no cree que su terminal actual admita 256 colores, entoncesalias tmux='tmux -2'
tendría sentido.TERM=xterm-256color tmux
, lo cual es sensato, a diferenciaTERM=screen-256color tmux
.tmux -2
es superior porque funciona incluso siscreen-256color
no está en la base de datos terminfo local.Estoy impresionado sobre cuán ricamente formateadas y detalladas son las respuestas (¡y la pregunta!). Si bien brindan información y soluciones valiosas sobre las herramientas que mencionó, brindan muy poca información sobre lo que está sucediendo y, lo que es más importante, por qué las cosas funcionan (algo) para algunas herramientas cuando supuestamente no deberían.
Aquí hay algunas ideas sobre sus preguntas fundamentales:
Lo que admite un terminal y lo que informa son cosas diferentes. El terminal Gnome, por ejemplo, es capaz de mostrar 256 colores, pero se anuncia al entorno (a través de la
$TERM
variable) como unxterm
emulador (8 colores).Las herramientas como
tput
seguir loTERM
que sea que esté configurado en:tput colors
pueden imprimir 8, mientrasenv TERM=xterm-256color tput colors
que imprimirán 256, independientemente de si su terminal realmente admite tales capacidades.vim
también sigueTERM
de forma predeterminada, pero como le dijo que use 256 colores (a través de la bandera o elset t_Co=256
), usará 256 colores. Y funciona porque su terminal realmente lo admite .tmux
, al igual que Gnome Terminal, también se presenta por defecto como un terminal de 8 colores. Pero, a diferencia de Gnome Terminal, solo habilita la capacidad de 256 colores si usa la-2
bandera, lo que también hace que se informe como unxterm-256color
emulador compatible.xterm
, como en el software emulador de terminal para el X11 , admite 256 colores, seguro. Peroxterm
como enTERM=xterm
es un "estándar" de 8 colores. Significa las capacidades del originalxterm
. Cuando se actualizó para admitir 256 colores, hace mucho tiempo, acuñó elxterm-256color
término para eso.Entonces todo se reduce a:
Qué capacidades admite realmente su terminal (y está habilitado para hacerlo)
Cómo informa tales capacidades al medio ambiente a través de
TERM
Cómo las herramientas se interpretan
TERM
y se ajustan en consecuencia.Como puede deducir de lo anterior, evite golpear
export TERM=xterm-256color
sus~/.bashrc
guiones y otros . Como esos archivos se ejecutan independientemente del terminal que esté utilizando, hará que todos sus terminales, incluidas las conexiones remotas desde Windows con Putty, el terminal de consola Linux, etc., se notifiquen como compatibles con xterm-256color. Lo cual puede ser cierto para algunos, pero ciertamente no para todos. Por ejemplo,getty
la consola de Linux a la que accedeCTRL+ALT+1..6
no lo hace.Los terminales deben informarse como el "estándar" con el que son más compatibles. Si sabe que pueden manejar 256 colores, configúrelos para anunciarse como tales.
Por último, pero no menos importante, una lectura sorprendente sobre
TERM
256 colores es:http://blog.sanctum.geek.nz/term-strings/
http://blog.sanctum.geek.nz/256-colour-terminals/
fuente
Proporcionaré una respuesta complementaria que aborda solo sus experimentos adicionales en la medida en que se relacionen con los colores del directorio solarizado .
Preparar
Tenemos la misma salida de color del script de prueba. La única diferencia es que usé
lxterminal
en Openbox con slim , xcompmgr y sin DM. Por lo tanto, no puedo configurar fácilmente una paleta personalizada como lo hizo, ya que ese emulador de terminal no ofrece esa configuración en una GUI y no hay un tema específico para ella (solo existen para algunos emuladores de terminal). Así que solo uso un poco de translucidez, terminales sin decoración y ese azul como color de primer plano con un fondo azul de Gentoo . Como no puedo usar las versiones ansi de los archivos de color, me he centrado exclusivamente en obtener resultados,dircolors.256dark
es decir, la versión simple "degradada".Utilicé la siguiente configuración relevante y la fuente de medio inconsolata :
Dircolors
La siguiente imagen muestra lo que sucede tanto dentro como fuera de tmux con esta configuración. El primer tercio a la izquierda muestra ventanas lxterminal sin decorar apiladas verticalmente (3). A la derecha tiene un ensamblaje tmux que muestra los mismos programas idénticos (3). También he incluido un 1 solarizado que muestra nano usando el archivo .Xresources incluido en el paquete completo (y muestreándolo con ):
xterm
xrdb -load ~/.Xresources
haga clic derecho / ver imagen para inspeccionar a resolución completa
El primer terminal en la esquina superior izquierda muestra los colores predeterminados del directorio. Justo debajo está la versión solarizada degradada . Excepto por el rosa sobre fondo azul para los
.c
archivos que agregué, es idéntico a lo que se espera de esto (vea la imagen a continuación como referencia). En comparación con los valores predeterminados, se basa más en los atributos extendidos, es decir, negrita / luz / reversa, etc. y los colores son obviamente diferentes. La asignación de color predeterminada para los.txt
archivos en muchas distribuciones es verde, pero en su lugar debería ser gris cuando se solariza . Un archivo ansi que representa un archivo .txt como verde no se procesa correctamente o no se procesa en absoluto. Los resultados del lado derecho que mostró son los correctos (256dark) en relación con la siguiente referencia:mapa de referencia de colores dirigidos "degradados" solarizados
Observaciones
Con la configuración que utilicé, los resultados parecen idénticos dentro y fuera de tmux (he revertido los comentarios (#) en vi pero, de lo contrario, el complemento se comporta como debería y el multiplexor no tiene ningún impacto en esto). Las fuentes juegan un papel muy importante en la definición de características solarizadas , y se requiere una buena fuente para maximizar la experiencia. Los colores del directorio solarizado que utilizan el archivo 256dark coinciden con la referencia y no requieren una configuración específica del emulador de terminal.
Conclusión
En realidad, la representación ansi de los colores del directorio es completamente diferente de la solarizada degradada (256dark). Tanto es así que debajo de los archivos ansi
.txt
son verdes. Uno no puede usarse para validar la representación del otro. Ambas soluciones necesitan una configuración diferente y producen resultados completamente diferentes.fuente
ansi-dark
salida correcta (ya que está usando la versión no degradada). Luego, si toma como referencia la salida de256dark
, entonces tiene la mentalidad invertida.