Windows: los colores del terminal se comportan de forma extraña

Windows: los colores del terminal se comportan de forma extraña

hiper terminal con wsl bash

Desde hace algún tiempo estoy experimentando un comportamiento extraño con los colores que muestra mi terminal. Arriba hay una captura de pantalla de bash (del subsistema Windows Linux) dentro de la terminal Hyper. Puedes ver que los colores comienzan bien, pero luego tengo un montón de problemas de permisos después de un lsy todo sale mal. El fondo gris persiste entonces indefinidamente.

Si bien no tengo una captura de pantalla, también he sido testigo del mismo comportamiento dentro de Powershell dentro de VSCode, por lo que dudo en llamar a esto un problema con Hyper. Parece que una vez que aparece un error, o el shell siente la necesidad de mostrar un color por alguna razón, todo se vuelve loco.

Además, lo intenté ls --color=autosin suerte: se produjeron los mismos resultados.

¿Alguien conoce alguna configuración de Windows/bash/WSL que evite que esto suceda?

Editar: Descubrí que este resaltado respeta el color predeterminado de "Fondo de pantalla" establecido en la opción "Valores predeterminados" dentro del panel de configuración de Bash en Ubuntu en Windows, pero solo una vez que se invocan ciertos comandos (como en mi captura de pantalla anterior). ¿Tiene esto sentido para alguien con más conocimientos que yo?

ingrese la descripción de la imagen aquí

Respuesta1

Llegando al fondo de esto, descubrí que la solución era establecer los colores predeterminados en la configuración de WSL para tener un color de "Fondo de pantalla" denegro(#000). Intenté configurar el color deseado como se menciona en la respuesta de Scott, sin embargo, esto no funcionó. Parece que cualquiera de los colores que provienen de WSL es aditivo, por lo que cualquier cambio de color se combinaría y chocaría con los colores de fondo en programas de terceros (Hyper, VSCode).

Respuesta2

Su actualización aclara la situación. Trivialmente, los programas le dicen al terminal que muestre texto escribiéndolo en el terminal. Un hecho menos obvio es que los programas pueden ordenar al terminal que realice otras acciones (por ejemplo, mover el cursor o borrar (partes de) la pantalla) escribiendo caracteres que no se muestran en el terminal. Hay algunos caracteres individuales que hacen cosas (por ejemplo, Retroceso y Retorno de carro para moverse hacia la izquierda y Tab para moverse hacia la derecha). Pero generalmente son secuencias de personajes, casi siempre comenzando con Escape, por lo que se les conoce como “secuencias de escape”. En las décadas de 1970 y 1980, cuandoLos terminales eran productos de hardware., cada vendedor eligió sus propias secuencias de escape y fue un caos. Con el tiempo,un estándar ha evolucionado.

Un grupo interesante de secuencias de escape es elSeleccionar representación gráfica (SGR)familia, que controlacómoSe muestra el texto visualizable. Esto incluye propiedades como negrita, cursiva, subrayado y color. Normalmente, después de mostrar texto en un estilo distinto al predeterminado, un programa intentará devolver el terminal a su esquema de visualización predeterminado. Hay secuencias de escape para girar.apagado negrita, cursiva y subrayado, pero no son tan compatibles como los que activan esas propiedades. Hay secuencias de escape para establecer el color en primer plano blanco sobre fondo negro, pero eso no es genial, porque el usuario podría preferir un esquema predeterminado diferente. Entonces, los programas que usan color generalmente terminan enviando la secuencia de reinicio, y eso cambia el terminal a su esquema de visualización predeterminado, como se especifica en las propiedades.

TL;DR Programas como pwdese simplemente muestran texto, solo muestran texto. Los programas que muestran texto en color finalizan restableciendo el terminal a sus colores predeterminados, y permanecen vigentes hasta que algún otro programa escribe una secuencia de escape para cambiarlos nuevamente.

Esto deja la pregunta: ¿por qué el terminalcomenzaren modo blanco sobre negro? Tal vez tenga algo en uno de sus archivos de inicialización ( .profile,, .bashrcetc.) que establezca explícitamente esos colores.

La solución es cambiar las propiedades predeterminadas a lo que desee (por ejemplo, texto blanco sobre fondo negro). Parece que ha encontrado el diálogo apropiado; simplemente cambie el color de fondo de la pantalla a negro y haga clic en "Aceptar".

información relacionada