Windows - as cores dos terminais se comportam de maneira estranha

Windows - as cores dos terminais se comportam de maneira estranha

hiperterminal com wsl bash

Há algum tempo venho experimentando um comportamento estranho com as cores que meu terminal exibe. Acima está uma captura de tela do bash (do Windows Linux Subsystem) dentro do terminal Hyper. Você pode ver que as cores começam bem, mas depois recebo vários problemas de permissão lse tudo dá errado. O fundo cinza persiste indefinidamente.

Embora eu não tenha uma captura de tela, também testemunhei o mesmo comportamento dentro do Powershell no VSCode - por isso, hesito em chamar isso de problema com o Hyper. Parece que quando ocorre um erro ou o shell sente a necessidade de exibir uma cor por algum motivo, tudo fica louco.

Além disso, tentei ls --color=autosem sorte - os mesmos resultados foram produzidos.

Alguém está ciente de uma configuração do Windows/bash/WSL que impedirá que isso aconteça?

Editar: descobri que esse destaque respeita qualquer cor padrão de "Fundo da tela" definida na opção "Padrões" no painel de configurações do Bash no Ubuntu no Windows, mas apenas quando determinados comandos são invocados (como na captura de tela acima)? Isso faz sentido para alguém com mais conhecimento do que eu?

insira a descrição da imagem aqui

Responder1

Chegando ao fundo disso, descobri que a solução era definir as cores padrão nas configurações do WSL para ter uma cor de "fundo da tela" depreto(#000). Tentei definir a cor desejada, conforme mencionado na resposta de Scott, mas não funcionou. Parece que qualquer uma das cores provenientes do WSL é aditiva, portanto, qualquer alteração de cor combinaria e entraria em conflito com as cores de fundo em programas de terceiros (Hyper, VSCode).

Responder2

Sua atualização esclarece a situação. Trivialmente, os programas dizem ao terminal para exibir texto escrevendo-o no terminal. Um fato menos óbvio é que os programas podem comandar o terminal para executar várias outras ações (por exemplo, mover o cursor ou apagar (partes da) tela) escrevendo caracteres não exibidos no terminal. Existem alguns personagens individuais que fazem coisas (por exemplo, Backspace e Carriage Return para mover para a esquerda e Tab para mover para a direita). Mas geralmente são sequências de caracteres, quase sempre começando com Escape, e por isso são conhecidas como “sequências de escape”. Nas décadas de 1970 e 1980, quandoterminais eram produtos de hardware, cada fornecedor escolheu suas próprias sequências de escape e foi um caos. Ao longo do tempo,um padrão evoluiu.

Um grupo interessante de sequências de escape é oSelecione Renderização Gráfica (SGR)família, que controlacomoo texto exibível é exibido. Isso inclui propriedades como negrito, itálico, sublinhado e cor. Normalmente, após exibir o texto em um estilo diferente do padrão, um programa tentará retornar o terminal ao seu esquema de exibição padrão. Existem sequências de fuga para virardesligado negrito, itálico e sublinhado, mas eles não são tão amplamente suportados quanto aqueles que ativam essas propriedades. Existem sequências de escape para definir a cor do primeiro plano branco em um fundo preto, mas isso não é ótimo, porque o usuário pode preferir um esquema padrão diferente. Portanto, os programas que usam cores normalmente terminam enviando a sequência de redefinição - e isso muda o terminal para seu esquema de exibição padrão, conforme especificado nas propriedades.

DR Programas como pwdesse apenas exibem texto, apenas exibem texto. Os programas que exibem texto em cores terminam redefinindo o terminal para suas cores padrão e permanecem em vigor até que algum outro programa escreva uma sequência de escape para alterá-los novamente.

Isso deixa a questão: por que o terminalcomeçarno modo branco sobre preto? Talvez você tenha algo em um de seus arquivos de inicialização ( .profile, .bashrc, etc.) que defina explicitamente essas cores.

A solução é alterar as propriedades padrão para o que você deseja (por exemplo, texto branco sobre fundo preto). Você parece ter encontrado a caixa de diálogo apropriada; basta alterar a cor de fundo da tela para preto e clicar em “OK”.

informação relacionada