Windows - цвета терминала ведут себя странно

Windows - цвета терминала ведут себя странно

гипертерминал с wsl bash

Я уже некоторое время сталкиваюсь со странным поведением цветов, отображаемых моим терминалом. Выше представлен скриншот bash (из подсистемы Windows Linux) внутри Hyper-терминала. Вы можете видеть, что цвета изначально отображаются нормально, но затем я получаю кучу проблем с разрешениями после ls, и все идет не так. Затем серый фон сохраняется неопределенно долго.

Хотя у меня нет скриншота, я наблюдал такое же поведение внутри Powershell в VSCode, поэтому я не решаюсь назвать это проблемой Hyper. Кажется, как только возникает ошибка или оболочка по какой-то причине чувствует необходимость отобразить цвет, все становится диким.

Кроме того, я пробовал с , ls --color=autoно безуспешно — результаты те же самые.

Кто-нибудь знает настройки Windows / bash / WSL, которые позволят этого не допустить?

Редактировать: Я обнаружил, что эта подсветка учитывает любой цвет "Фона экрана" по умолчанию, установленный в параметре "По умолчанию" в панели настроек Bash на Ubuntu на Windows, но только после вызова определенных команд (как на моем скриншоте выше)? Имеет ли это смысл для кого-то более осведомленного, чем я?

введите описание изображения здесь

решение1

Разобравшись в этом, я обнаружил, что решение заключается в том, чтобы установить цвета по умолчанию в настройках WSL, чтобы цвет «Фона экрана» былчерный(#000). Я попытался установить нужный мне цвет, как указано в ответе Скотта, однако это не сработало. Похоже, что все цвета, которые поступают из WSL, являются аддитивными, поэтому любые изменения цвета будут сочетаться и конфликтовать с фоновыми цветами в сторонних программах (Hyper, VSCode).

решение2

Ваше обновление проясняет ситуацию. Тривиально, программы говорят терминалу отображать текст, записывая текст на терминал. Менее очевидный факт заключается в том, что программы могут отдавать команды терминалу выполнять различные другие действия (например, перемещать курсор или стирать (части) экрана), записывая неотображаемые символы на терминал. Есть несколько отдельных символов, которые что-то делают (например, Backspace и Carriage Return для перемещения влево и Tab для перемещения вправо). Но, как правило, это последовательности символов, почти всегда начинающиеся с Escape, и поэтому они известны как «escape-последовательности». Еще в 1970-х и 1980-х годах, когдатерминалы были аппаратными продуктами, каждый продавец выбрал свои собственные последовательности выхода, и это был хаос. Со временем,стандарт развился.

Одна интересная группа последовательностей побегов — этоВыбрать графическую визуализацию (SGR)семья, которая контролируеткакотображается отображаемый текст. Сюда входят такие свойства, как жирный, курсив, подчеркивание и цвет. Обычно после отображения текста в стиле, отличном от стиля по умолчанию, программа пытается вернуть терминал к его схеме отображения по умолчанию. Существуют управляющие последовательности, чтобы включитьвыключенный жирный, курсив и подчеркивание, но они не поддерживаются так широко, как те, которые включают эти свойства. Существуют escape-последовательности для установки цвета переднего плана на белом фоне на черном, но это не очень хорошо, потому что пользователь может предпочесть другую схему по умолчанию. Поэтому программы, использующие цвет, обычно заканчиваются отправкой последовательности сброса — и она переключает терминал на его схему отображения по умолчанию, как указано в свойствах.

TL;DR Такие программы pwdпросто отображают текст, просто отображают текст. Программы, отображающие текст в цвете, заканчивают тем, что сбрасывают терминал к цветам по умолчанию, и они остаются в силе до тех пор, пока какая-то другая программа не напишет escape-последовательность, чтобы снова изменить их.

Остается вопрос: почему терминалначинать.profileв режиме "белое на черном"? Возможно, в одном из файлов инициализации ( , , и т. д.) есть что-то .bashrc, что явно задает эти цвета.

Решение — изменить свойства по умолчанию на те, которые вам нужны (например, белый текст на черном фоне). Кажется, вы нашли подходящий диалог; просто измените цвет фона экрана на черный и нажмите «ОК».

Связанный контент