1. Введение
Большинство программистов привыкли к скучному черно-белому тексту в командной строке, и первая строка кода на любом языке программирования должна научить нас, как вывести строку на стандартный вывод (терминал командной строки или консоль в большинстве случаев). ), в котором говорится: «Все, что черное или нет. Белоеhello world!. Так много «больших парней», которые не разбираются в программировании, думают, что программисты странные, весь день смотрят в черный экран, стучат и стучат вслепую, и что они как сокровище. Тогда эта статья расскажет вам о том, что это не просто черный экран, он тоже может быть красочным и ярким. . . Хахаха. . . На картинке ниже показан окончательный эффект от этой статьи, опубликованной заранее, чтобы показать, что я не дую 🐂B.
2. Управляющие последовательности ANSI
Чтобы отображать цветной текст на терминале командной строки, похожем на черно-белый телевизор, вы должны знать механизм его реализации, то есть устанавливать атрибуты текста и цвета.ANSI 转义序列.
2.1 Что такое escape-последовательности ANSI?
Управляющие последовательности ANSI в некоторых местах также называются управляющими кодами ANSI. Это последовательность символов ASCII, используемая для изменения отображения графики и управления движением курсора в терминале командной строки.
Его первые два символа фиксируются как:
- escape-символ
Escкод ASCII составляет 27 (Hex:0x1b) - символ левой скобки
[, код ASCII — 91 (шестнадцатеричный:0x5b)
За ними следуют буквенно-цифровые коды (с учетом регистра), которые управляют функциями клавиатуры и дисплея. Здесь мы обсуждаем только escape-последовательности, связанные с отображением, то есть настройку режима отображения графики.
2.2 Используйте escape-последовательности ANSI для установки режима отображения графики
формат (обратите внимание, что символmокончание):
Esc[Value;...;Valuem
Поддерживаемые параметры режима отображения содержат свойства текста, цвета переднего плана и фона.
2.2.1 Свойства текста
| Value | текстовый атрибут |
|---|---|
| 0 | сбросить все свойства |
| 1 | Смелый |
| 4 | подчеркивать |
| 5 | текст мигает |
| 7 | обратный дисплей |
| 8 | Спрятать |
2.2.2 Цвет переднего плана
| Value | цвет |
|---|---|
| 30 | чернить |
| 31 | красный |
| 32 | зеленый |
| 33 | Желтый |
| 34 | Синий |
| 35 | пурпурный |
| 36 | зеленый |
| 37 | белый |
2.2.3 Цвет фона
| Value | цвет |
|---|---|
| 40 | чернить |
| 41 | красный |
| 42 | зеленый |
| 43 | Желтый |
| 44 | Синий |
| 45 | пурпурный |
| 46 | зеленый |
| 47 | белый |
3. Реализация Python
Понимая, как работают управляющие последовательности ANSI, можно отображать цвета текста и фона разными цветами в терминале командной строки, используя любой язык программирования. Взяв в качестве примера Python, обычно мы используемprint()Функция, проходящая в строке, будет распечатать знакомые черно-белые символы к стандартному выводу, но если вы добавляете escape Asceence, которые управляют дисплеем перед входящей строкой, она может отображаться в соответствии с режимом отображения. Отказ
3.1 Использование print() для печати управляющих последовательностей ANSI
Мы передаем его в print()ANSI 转义序列 + 要显示的字符串способ управления режимом отображения текста. должен быть в курсеANSI 转义序列первый персонаж изEscявляется непечатаемым символом, нам нужно представить его в виде escape-символов юникода,EscЮникод представление\u001b; Также установите режим отображения изображения, не забудьтеANSI 转义序列персонаж в концеm,можетmДумайте об этом как о последовательности, которая управляет режимом отображения и разделителем отображаемого текста.
Показать красный «привет, мир!»:
print("\u001b[31m hello world!")
3.2 Установите атрибут текста + цвет переднего плана + цвет фона одновременно
из предыдущего режима графического отображенияANSI 转义序列Из формата видно, что одновременно поддерживаются несколько настроек.Value, несколькоValueРазделяйте точкой с запятой. Цвета переднего плана и фона одного цвета из-за свойствValueвсе разные, поэтому порядок их установки не требуется. Например, отображение «hello world!» мигающим белым цветом на зеленом фоне.
print("\u001b[42;37;5m hello world!")
3.3 Сбросить все свойства
Внимательный читатель должен заметить, что до тех пор, пока не будет установлено новое свойство отображения, ранее установленное свойство останется, даже приглашение командной строки будет затронуто. Затем, чтобы установка свойств каждый раз влияла только на текущий дисплей, необходимо добавить escape-последовательность, которая сбрасывает все свойства после отображаемого текста.\u001b[0m.
print("\u001b[34;1m hello world! \u001b[0m")
print("\u001b[41;37m hello \u001b[0m \u001b[32;4m world! \u001b[0m")
3.4 Расширенный цвет набор цвета 256 цветов
Будь то цвет переднего плана или цвет фона, представленный выше, цветов всего 8, включая черный и белый, и при высоких эстетических требованиях эти цвета совсем не элегантны. К счастью, у нас есть другие цвета на выбор, но поддерживаются только некоторые терминалы. Автор тестировал только MacOs, терминалы других платформ, читатели могут попробовать сами.
Формат escape-последовательности расширенного набора цветов:
"\u001b[38;5;${ID}m"
Пример:
for i in range(0, 16):
line = ""
for j in range(0, 16):
code = str(i * 16 + j)
line += "\u001b[38;5;" + code + "m " + code.ljust(4)
print(line)
print("\u001b[0m")
Разумеется, фоновый цвет тоже поддерживается, просто измените 38 на 48:
"\u001b[48;5;${ID}m"
Пример:
for i in range(0, 16):
line = ""
for j in range(0, 16):
code = str(i * 16 + j)
line += "\u001b[48;5;" + code + "m " + code.ljust(4)
print(line)
print("\u001b[0m")
4. Реализация Node.js
Ссылаться на"nodejs печатает цветной "черный"".
The End
Отображение цветного «черного» в командной строке — это так просто!
Thanks
Если эта статья была вам полезна, ставьте лайк 👍
Отсканируйте QR-код в WeChat, чтобы получить оригиналы новейших технологий