-1

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

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

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

Кроме того, я попытался с ls --color=auto без удачи - те же результаты получаются.

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

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

2 ответа2

1

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

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

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

Это оставляет вопрос: почему терминал запускается в режиме белого на черном?  Может быть, у вас есть что-то в одном из ваших файлов инициализации (.profile , .bashrc и т.д.), Которые явно устанавливают эти цвета.

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .