Загрузить PDF
Загрузить PDF
Вам надоело постоянно видеть стандартный белый текст на черном фоне в командной строке? Если да, тогда читайте дальше, чтобы узнать, как изменить цвет текста и фона.
-
-
-
Введите color z, чтобы получить список всех цветов и цифры или буквы, которые им соответствуют. Первые буква/цифра — это цвет фона, а вторая — цвет текста.
-
Например, введите color 6, чтобы получился желтый текст, color 4 для красного цвета, color A для изменения текста в светло-зеленую окраску и так далее.
-
Для изменения цвета текста, а также его фона, введите color ce, чтобы получился светло-желтый текст на светло-красном фоне, или любую другую комбинацию. Первая буква/цифра обозначает цвет фона, а вторая соотносится с цветом текста.
Реклама
-
-
-
-
-
Выберите свойства текста или фона и отредактируйте цветовые значения.
- Поэкспериментируйте с различными комбинациями!
-
Реклама
Список возможных расцветок
- 0 = Черный
- 1 = Синий
- 2 = Зеленый
- 3 = Аквамарин
- 4 = Красный
- 5 = Фиолетовый
- 6 = Желтый
- 7 = Белый
- 8 = Серый
- 9 = Светло-голубой
- A = Светло-зеленый
- В = Светлый аквамарин
- С = Светло-красный
- D = Светло-фиолетовый
- E = Светло-желтый
- F = Ярко-белый
Советы
- Будьте осторожны в правописании слова «color» и не введите по ошибке «colour». В противном случае изменения не сработают.
Реклама
Об этой статье
Эту страницу просматривали 104 072 раза.
Была ли эта статья полезной?
Last Updated :
24 Jun, 2024
Customizing the appearance of your Command Prompt can make your coding or command execution sessions more enjoyable and easier on the eyes. In this guide, we’ll walk you through the process of changing colours in Command Prompt, from altering text colour to adjusting the background for better clarity and personal preference. Whether you want to modify the entire colour scheme or just tweak a few settings, these steps will help you personalize your Command Prompt environment effectively. Get ready to transform the standard black-and-white backdrop into a more vibrant and user-friendly interface.
First, it’s important to know for reference how a default Command Prompt terminal looks like, it looks something like this:
Here, we are going to change the color text and also the background color of cmd. Assume 2 variable x & y which are associated with specific colors.
color xy
‘x‘ represents the color of the Terminal’s background, whereas,
‘y‘ represents the color of the font on the Command Prompt Terminal.
Following the HEX values of the colors supported by Command Prompt:
0 = Black 8 = Gray
1 = Blue 9 = Light Blue
2 = Green A = Light Green
3 = Aqua B = Light Aqua
4 = Red C = Light Red
5 = Purple D = Light Purple
6 = Yellow E = Light Yellow
7 = White F = Bright White
Example 1:
Suppose we want a white background, so after referring to the color table above we will type, ‘f’ in place of ‘x’. Similarly, if we want a light purple colored font, we will type ‘d’ in place of ‘y’. (x & y are the variables we had assumed earlier).
color fd
Example 2:
‘0’ specifies the black color attribute, and since its typed at the place of ‘x’ i.e. it will be applied to background. ‘a’ specifies the light green color attribute, and since its typed at the place of ‘y’ i.e light green attribute will be applied to the font color.
color 0a
Note: To get all the related information on using color command in Command Prompt you can use the following command
color /?
In conclusion, customizing the colors in Command Prompt not only enhances the visual appeal but can also improve usability by making the text easier to read. By adjusting the color settings, you can create a Command Prompt environment that aligns with your preferences and working style. Whether you’re setting a different background color or changing the text color for better contrast, these simple modifications can significantly enrich your experience with Windows Command Prompt.
How many of you agree that in spite of all the useful features that Command Prompt possesses, it seems to be a bit boring due to the white color font with a black background?
Windows has always been colorful. Be it themes, background, or the colorful icons. Don’t you think, your colorful Windows OS should stay colorful, irrespective of the program running on it ?
So, let’s add a dab of color to Command Prompt on Windows 10, 8, and 7 and make it look vivid.
There are two different methods to change Command Prompt’s background and font color for Windows 10, 8, and 7.
1. Use Commands
Before changing the font color, you can get an overview of what can be done with the color command. Follow these steps to change the font and background color:
- Go to Start button, type ‘CMD’ in the search box to open Command Prompt.
- Command Prompt window will open, type “color/?”
- You will get the color codes.
- To get the color of the background and font changed, use the color command option along with the background color code followed by the font color code.
For Example: Let’s paint Command Prompt in white background with red font color.
- Type “Color 74”
- To change it back to default white font and black background, type “color” and boom, everything is back to basics.
- Now, you can try different combinations to make the dull command prompt window look cooler.
2. Make Changes in Properties
Don’t want to enter any commands, still, want to play with the color and customize Command Prompt. Follow these steps:
If you have Windows 10 installed, you can adjust transparency as well. Under all the different sections on Colors tab, there is an option Opacity. You can set the transparency of Command Prompt to the desired level.
Also Read: How To Remove Computer Virus Using CMD
Note: This option is only available if you have unchecked the Use legacy console setting from the Options tab.
These are the two different methods to make your Command Prompt look as colorful and vibrant as you want. Try them and let us know, which one worked for you.
Watch Video to Know More.
How to Change Text Color in a Windows Terminal
A quick overview and a simple Windows CMD script to make your terminal output a little more lively
Introduction
The default text output to a terminal is monochromatic and doesn’t provide a simple method to provide context. For instance, you may want an error to appear in red, success in green, or important info to be output in bold.
Adding color to your terminal output is straightforward and involves outputting the correct control characters before your text.
This is a companion article to How to change text color in a Linux terminal.
Terminal Colors
To output colored text, you need to echo
the control characters for the required color, then output your text, and then (to be tidy) reset the output back to defaults. The following table lists the codes:
Color | Foreground | Background |
---|---|---|
Default | ESC[39m | ESC[49m |
Black | ESC[30m | ESC[40m |
Dark red | ESC[31m | ESC[41m |
Dark green | ESC[32m | ESC[42m |
Dark yellow (Orange-ish) | ESC[33m | ESC[43m |
Dark blue | ESC[34m | ESC[44m |
Dark magenta | ESC[35m | ESC[45m |
Dark cyan | ESC[36m | ESC[46m |
Light gray | ESC[37m | ESC[47m |
Dark gray | ESC[90m | ESC[100m |
Red | ESC[91m | ESC[101m |
Green | ESC[92m | ESC[101m |
Orange | ESC[93m | ESC[103m |
Blue | ESC[94m | ESC[104m |
Magenta | ESC[95m | ESC[105m |
Cyan | ESC[96m | ESC[106m |
White | ESC[97m | ESC[107m |
and the reset code is ESC[0m where ESC is the escape code.
The format of the string for foreground color is:
"ESC[" + "<0 or 1, meaning normal or bold>;" + "<color code> + "m"
and for background:
"ESC[" + "<color code>" + "m"
These codes can be output together in order to change fore- and back-ground colors simultaneously.
Using the Code
Before you can output the color code, you need to generate the ESC sequence. It’s probably easiest to do that once and store it for later:
:: Sets up the ESC string for use later in this script :setESC for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do ( set ESC=%%b exit /B 0 ) exit /B 0
This will set a variable ESC
with the correct sequence.
A simple example of outputting red text:
setlocal enabledelayedexpansion call :setESC echo !ESC![91mThis is red text!ESC![0m
An example of outputting red text on a white background:
setlocal enabledelayedexpansion call :setESC echo !ESC![91m!ESC![107mThis is red text on a white background!ESC![0m"
This is a little cumbersome so I’ve created some simple subroutines that provide the means to output text in a more civilised manner.
Helper Functions
The following helper functions allow you to do stuff like:
call :WriteLine "This is red text" "Red" call :WriteLine "This is red text on a white background" "Red" "White"
Much easier.
REM Set to false if you find your environment just doesn't handle colors well set useColor=true :: Sets up the ESC string for use later in this script :setESC for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do ( set ESC=%%b exit /B 0 ) exit /B 0 :: Sets the currentColor global for the given foreground/background colors :: currentColor must be output to the terminal before outputting text in :: order to generate a colored output. :: :: string foreground color name. Optional if no background provided. :: Defaults to "White" :: string background color name. Optional. Defaults to Black. :setColor REM If you want to get a little fancy then you can also try REM - %ESC%[4m - Underline REM - %ESC%[7m - Inverse set foreground=%~1 set background=%~2 if "!foreground!"=="" set foreground=White if /i "!foreground!"=="Default" set foreground=White if "!background!"=="" set background=Black if /i "!background!"=="Default" set background=Black if "!ESC!"=="" call :setESC REM This requires the setContrastForeground subroutine, which is discussed below if /i "!foreground!"=="Contrast" ( call :setContrastForeground !background! set foreground=!contrastForeground! ) set currentColor= REM Foreground Colours if /i "!foreground!"=="Black" set currentColor=!ESC![30m if /i "!foreground!"=="DarkRed" set currentColor=!ESC![31m if /i "!foreground!"=="DarkGreen" set currentColor=!ESC![32m if /i "!foreground!"=="DarkYellow" set currentColor=!ESC![33m if /i "!foreground!"=="DarkBlue" set currentColor=!ESC![34m if /i "!foreground!"=="DarkMagenta" set currentColor=!ESC![35m if /i "!foreground!"=="DarkCyan" set currentColor=!ESC![36m if /i "!foreground!"=="Gray" set currentColor=!ESC![37m if /i "!foreground!"=="DarkGray" set currentColor=!ESC![90m if /i "!foreground!"=="Red" set currentColor=!ESC![91m if /i "!foreground!"=="Green" set currentColor=!ESC![92m if /i "!foreground!"=="Yellow" set currentColor=!ESC![93m if /i "!foreground!"=="Blue" set currentColor=!ESC![94m if /i "!foreground!"=="Magenta" set currentColor=!ESC![95m if /i "!foreground!"=="Cyan" set currentColor=!ESC![96m if /i "!foreground!"=="White" set currentColor=!ESC![97m if "!currentColor!"=="" set currentColor=!ESC![97m if /i "!background!"=="Black" set currentColor=!currentColor!!ESC![40m if /i "!background!"=="DarkRed" set currentColor=!currentColor!!ESC![41m if /i "!background!"=="DarkGreen" set currentColor=!currentColor!!ESC![42m if /i "!background!"=="DarkYellow" set currentColor=!currentColor!!ESC![43m if /i "!background!"=="DarkBlue" set currentColor=!currentColor!!ESC![44m if /i "!background!"=="DarkMagenta" set currentColor=!currentColor!!ESC![45m if /i "!background!"=="DarkCyan" set currentColor=!currentColor!!ESC![46m if /i "!background!"=="Gray" set currentColor=!currentColor!!ESC![47m if /i "!background!"=="DarkGray" set currentColor=!currentColor!!ESC![100m if /i "!background!"=="Red" set currentColor=!currentColor!!ESC![101m if /i "!background!"=="Green" set currentColor=!currentColor!!ESC![102m if /i "!background!"=="Yellow" set currentColor=!currentColor!!ESC![103m if /i "!background!"=="Blue" set currentColor=!currentColor!!ESC![104m if /i "!background!"=="Magenta" set currentColor=!currentColor!!ESC![105m if /i "!background!"=="Cyan" set currentColor=!currentColor!!ESC![106m if /i "!background!"=="White" set currentColor=!currentColor!!ESC![107m exit /B 0 :: Outputs a line, including linefeed, to the terminal using the given foreground / background :: colors :: :: string The text to output. Optional if no foreground provided. Default is just a line feed. :: string Foreground color name. Optional if no background provided. Defaults to "White" :: string Background color name. Optional. Defaults to "Black" :WriteLine SetLocal EnableDelayedExpansion if "!ESC!"=="" call :setESC set resetColor=!ESC![0m set str=%~1 if "!str!"=="" ( echo: exit /b 0 ) if "!str: =!"=="" ( echo: exit /b 0 ) if /i "%useColor%"=="true" ( call :setColor %2 %3 echo !currentColor!!str!!resetColor! ) else ( echo !str! ) exit /b 0 :: Outputs a line without a linefeed to the terminal using the given foreground / background colors :: :: string The text to output. Optional if no foreground provided. Default is just a line feed. :: string Foreground color name. Optional if no background provided. Defaults to "White" :: string Background color name. Optional. Defaults to "Black" :Write SetLocal EnableDelayedExpansion if "!ESC!"=="" call :setESC set resetColor=!ESC![0m set str=%~1 if "!str!"=="" exit /b 0 if "!str: =!"=="" exit /b 0 if /i "%useColor%"=="true" ( call :setColor %2 %3 <NUL set /p =!currentColor!!str!!resetColor! ) else ( <NUL set /p =!str! ) exit /b 0
Handling Contrast
Suppose we have defined a set of predefined colors and we want to use them to ensure consistency:
set color_primary=Blue set color_mute=Gray set color_info=Yellow set color_success=Green set color_warn=DarkYellow set color_error=Red
If we output text using these as background colors, we get:
call :WriteLine call :WriteLine "Default color on predefined background" call :WriteLine call :WriteLine " Default colored background" "Default" call :WriteLine " Primary colored background" "Default" %color_primary% call :WriteLine " Mute colored background" "Default" %color_mute% call :WriteLine " Info colored background" "Default" %color_info% call :WriteLine " Success colored background" "Default" %color_success% call :WriteLine " Warning colored background" "Default" %color_warn% call :WriteLine " Error colored background" "Default" %color_error%
Things are a bit murky so let’s add one more function that will provide a contrasting foreground on whatever background we choose.
:: Sets the name of a color that will providing a contrasting foreground :: color for the given background color. :: :: string background color name. :: on return, contrastForeground will be set :setContrastForeground set background=%~1 if "!background!"=="" background=Black if /i "!background!"=="Black" set contrastForeground=White if /i "!background!"=="DarkRed" set contrastForeground=White if /i "!background!"=="DarkGreen" set contrastForeground=White if /i "!background!"=="DarkYellow" set contrastForeground=White if /i "!background!"=="DarkBlue" set contrastForeground=White if /i "!background!"=="DarkMagenta" set contrastForeground=White if /i "!background!"=="DarkCyan" set contrastForeground=White if /i "!background!"=="Gray" set contrastForeground=Black if /i "!background!"=="DarkGray" set contrastForeground=White if /i "!background!"=="Red" set contrastForeground=White if /i "!background!"=="Green" set contrastForeground=White if /i "!background!"=="Yellow" set contrastForeground=Black if /i "!background!"=="Blue" set contrastForeground=White if /i "!background!"=="Magenta" set contrastForeground=White if /i "!background!"=="Cyan" set contrastForeground=Black if /i "!background!"=="White" set contrastForeground=Black exit /B 0
We’ve already wired this up in the Write
methods: If the foreground color is set as «Contrast
«, then the foreground will be set as something that has a decent contrast to the given background.
To use, we simply do:
call :WriteLine " Primary colored background" "Contrast" %color_primary% call :WriteLine " Mute colored background" "Contrast" %color_mute% call :WriteLine " Info colored background" "Contrast" %color_info% call :WriteLine " Success colored background" "Contrast" %color_success% call :WriteLine " Warning colored background" "Contrast" %color_warn% call :WriteLine " Error colored background" "Contrast" %color_error%
Interesting Points
A challenge in this was outputting text via a CMD shell without a newline. The <var>echo</var>
command, by default, adds a line feed. To output text in a CMD script without including a line feed, simply use:
<NUL set /p ="My string goes here"
Использование цвета в терминале
Время на прочтение7 мин
Количество просмотров9.1K
Я пишу небольшие скрипты для работы в программах-оболочках «Windows PowerShell» версии 5.1 и «PowerShell» версии 7 в операционной системе «Windows 10». Иногда тянет подсветить текстовый вывод в консоль разными цветами. В этой статье я хочу рассказать о паре грабель, на которые можно при этом наступить.
Окунемся в историю
Чтобы понять проблемы с использованием цвета в терминалах (сегодня — в эмуляторах терминалов), полезно в двух словах представлять, как цвет появился в терминалах и как он развивался.
Когда терминалы были физическими устройствами, возможность использования разных цветов была ограничена на уровне устройства. Меньшее количество цветов в терминале означало более дешевое устройство, а, значит, более массовое (больше продаж — больше прибыль; вообще это не всегда так, но в данном случае это работало).
Сначала были монохромные терминалы (два цвета — для текста и для фона). Потом появился трехбитный цвет: пользователю терминала стали доступны 8 разных цветов. Именно тогда из ограничения в 3 бита родилась знаменитая восьмерка названий цветов, ставшая «родной» для терминалов:
000 #000000 black черный
001 #0000ff blue синий
010 #00ff00 green зеленый
011 #00ffff cyan голубой
100 #ff0000 red красный
101 #ff00ff magenta пурпурный (лиловый и т.д.)
110 #ffff00 yellow желтый
111 #ffffff white белый
Во второй редакции стандарта «ECMA-48» от 1979 года (первая редакция — от 1976 года, но я не смог найти ее в интернете) за этими названиями цветов уже закреплены соответствующие управляющие последовательности (коды). (Действующая редакция этого стандарта — пятая, от 1991 года.) В редакции от 1979 года есть еще управляющий код, с помощью которого можно было выделять текст. В разных терминалах это делалось по-разному: увеличением толщины (насыщенности) шрифта или увеличением яркости цвета. Таким образом из 8 имеющихся цветов выжимали 16 разных вариантов для текста (для фона использовали 8 базовых цветов):
black | bright (bold) black
blue | bright (bold) blue
green | bright (bold) green
cyan | bright (bold) cyan
red | bright (bold) red
magenta | bright (bold) magenta
yellow | bright (bold) yellow
white | bright (bold) white
Эти 16 названий цветов часто называют «цветами ANSI», хотя в соответствующем стандарте «ANSI X3.64» эти названия появились позже, чем в «ECMA-48», в 1980-е (сейчас стандарт «ANSI X3.64» не действует).
Следует отметить, что в упомянутых стандартах указаны только названия цветов, а не точные значения. Разные производители терминалов использовали для этих названий разные значения цветов. Поэтому цвет с одним и тем же названием мог выглядеть очень по-разному на терминалах разных производителей. Из этого в современных эмуляторах терминалов родились цветовые схемы с ограниченной палитрой из 8, 16 или более цветов.
Грабли первые
Цвет текста по умолчанию и цвет фона по умолчанию.
При ограничении цвета 3 битами на уровне устройства цвет текста по умолчанию и цвет фона по умолчанию приходилось выбирать из 8 доступных цветов. Обычно цветом фона по умолчанию выбирался черный (000), а цветом текста по умолчанию — белый (111).
При переходе от терминалов-физических устройств к эмуляторам терминалов (к программам) цветовые схемы с ограниченной палитрой в 8 и 16 цветов перешли в эмуляторы терминалов «по наследству». Несмотря на то, что сегодня физическое ограничение количества цветов в палитре цветовой схемы исчезло, никто не торопится увеличивать палитры цветовых схем. Главная причина этого в том, что с точки зрения дизайна пользовательских интерфейсов увеличение количества цветов в пользовательском интерфейсе увеличивает сложность нахождения гармоничного сочетания цветов, имеющихся в палитре (поэтому дизайнеры предпочитают обходиться как можно меньшим количеством цветов при проектировании пользовательских интерфейсов, да и не только их).
В самых свежих версиях современных эмуляторов терминалов для цвета текста по умолчанию и цвета фона по умолчанию в палитру цветовой схемы добавлены отдельные слоты, то есть вместо, к примеру, палитры из 16 слотов мы имеем палитру в 18 слотов (16 цветов ANSI, цвет текста по умолчанию, цвет фона по умолчанию). Но большинство авторов цветовых схем отказывается от использования этой возможности, назначая отдельному слоту для цвета текста по умолчанию то же значение цвета, что и для слота цвета «белый», а отдельному слоту для цвета фона по умолчанию — то же значение цвета, что и для слота цвета «черный».
Иллюстрация этой ситуации на примере эмулятора терминала «Windows Terminal». Видно палитру из 16 цветов ANSI и добавочные слоты палитры для цвета текста по умолчанию и цвета фона по умолчанию (в столбце «System colors»). Слот «Foreground» совпадает по значению цвета со слотом «White», а слот «Background» совпадает по значению цвета со слотом «Black». Это одна из цветовых схем этого эмулятора терминала, она называется «Campbell» и является цветовой схемой по умолчанию в этом эмуляторе терминала, но ее, конечно, можно поменять как на одну из встроенных, так и на созданную самостоятельно (или загруженную из интернета в формате JSON):
К чему это приводит? Предположим, я подсветил текст в терминале цветом из «черного» слота палитры установленной в терминале цветовой схемы. При этом я не учел, что во многих цветовых схемах «черный» цвет также является цветом фона по умолчанию. Таким образом, во многих терминалах мой скрипт выведет в консоль текст, который никто не увидит, так как текст «черного» цвета сольется с фоном по умолчанию («черного») цвета.
То же самое случится, если я захочу подсветить какой-нибудь текст, изменив цвет фона под ним на цвет из слота «белый» палитры текущей цветовой схемы, но оставив цвет самого текста цветом по умолчанию. Во многих терминалах такой текст никто не увидит, так как текст цвета по умолчанию («белого») сольется с цветом «белый» фона.
Как избежать этой проблемы? Хоть вам никто не может запретить использовать в терминале подсветку текста черным цветом на фоне по умолчанию или подсветку фона белым цветом у текста цвета по умолчанию, я советую избегать этих сочетаний.
Причина проблемы
Описанная выше проблема, а также ряд других, появляется в том случае, когда мы меняем только одну составляющую: или цвет текста, или цвет фона под текстом, оставляя другую составляющую на волю настроек цвета, произведенных пользователем эмулятора терминала. Очевидно, что избежать этих проблем можно, если во всех случаях контролировать обе составляющие: и цвет текста, и цвет фона под текстом. Однако, такое решение может не понравиться пользователю: вы навяжете ему свою цветовую схему вместо той, которую выбрал он для своего эмулятора терминала. Кроме того, создание своей цветовой схемы — не такая простая задача, как это кажется на первый взгляд. В среде пользователей терминалов не так много популярных цветовых схем, одна из них — знаменитая «Solarized». На сайте автора этой схемы можно узнать о множестве подводных камней, которые могут попасться при разработке цветовой схемы.
Грабли вторые
Использование 24-битного цвета.
Мне, как человеку, привыкшему писать тексты в интернете с использованием языков HTML и CSS, удобнее пользоваться цветовой моделью RGB. В этой модели для каждой составляющей (красная, зеленая, синяя) отводится один байт, то есть в целом это три байта, а, значит, 24 бита. 24-битный цвет (TrueColor) позволяет использовать более 16 миллионов различных цветов (224). Современные эмуляторы терминалов предоставляют возможность пользоваться таким цветом.
В одном из своих скриптов я захотел подсветить некоторые слова в тексте, выводимом в консоль. На языке PowerShell это можно исполнить достаточно просто с помощью соответствующего управляющего кода:
$text = "слово"
$Esc = [char]27 # с PowerShell версии 6 доступны `e и `u{1B}
$color = "38;2;255;255;0" # желтый цвет, RGB: 255;255;0
"$Esc[$color`m" + $text + "$Esc[0m"
В моем эмуляторе терминала «Windows Terminal» при установленной цветовой схеме «One Half Dark» это выглядит достаточно симпатично. Однако, я не учел, что существуют не только темные («ночные») цветовые схемы, но и светлые («дневные»). (Хотя я считаю использование светлых цветовых схем в терминалах кощунством.)
Иллюстрация моего вывода в терминал при цветовой схеме «One Half Dark» и при цветовой схеме «One Half Light»:
Видно, что при светлой цветовой схеме выделенные желтым слова хоть и видны, но имеют малую контрастность с цветом фона по умолчанию.
Кстати, тут следует упомянуть, что понятие «контрастность» можно выразить в числах, а, следовательно, это понятие объективное, а не субъективное. По крайней мере, это верно для веба: формула вычисления контрастности двух цветов определена в документе «WCAG» (действующая версия этого документа — 2.1, она опубликована в 2018 году). Этот же документ устанавливает критерий приемлемой контрастности цветов, разделенный на несколько уровней: «AA» и «AAA» (последний — более строгий). Согласно этому документу минимально приемлемая контрастность двух цветов равна 3:1 (яркость двух цветов должна отличаться в три раза). Нахождение хорошей контрастности всех пар цветов — это, кстати, один из подводных камней построения хорошей цветовой схемы для терминала.
Контрастность желтого #ffff00
цвета и цвета фона по умолчанию (для цветовой схемы «One Half Dark» #282c34
и для цветовой схемы «One Half Light» #fafafa
): 13,03:1 и 1,02:1. Ясно, что второй случай под критерий не подходит, да это видно и невооруженным взглядом.
Как избежать этой проблемы? Либо искать цвет, который подойдет для большинства используемых цветовых схем, но это аналогично построению своей цветовой схемы, о чем уже говорилось выше. Либо положиться на ограниченную палитру популярных цветовых схем для терминалов. То есть вместо цвета по модели RGB можно использовать цвет из текущей цветовой схемы. Для этого используется другой управляющий код, в котором цвет задается одним числом из 8, 16, 18 или более доступных слотов палитры текущей цветовой схемы.
Например, в моем случае я использовал слот с названием «желтый» из палитры текущей цветовой схемы. Вот как это выглядит в коде на языке PowerShell:
$text = "слово"
$Esc = [char]27 # с PowerShell версии 6 доступны `e и `u{1B}
$color = "33" # желтый цвет, палитра текущей цветовой схемы
"$Esc[$color`m" + $text + "$Esc[0m"
Иллюстрация моего вывода в терминал при цветовой схеме «One Half Dark» и при цветовой схеме «One Half Light» с использованием слота из палитры этих цветовых схем:
Как видно из вышеприведенной иллюстрации, такое использование цвета выглядит намного приятнее. Тут мы не выдумываем своё, а полагаемся на уже придуманное другими людьми цветовое решение. Контрастность цвета из «желтого» слота палитры двух указанных цветовых схем по сравнению с цветом фона по умолчанию:
-
«One Half Dark»:
#E5C07B
«желтый» и#282C34
(фон по умолчанию) — 8,1:1; -
«One Half Light»:
#C18301
«желтый» и#FAFAFA
(фон по умолчанию) — 3,08:1.
Оба варианта удовлетворяют критерию приемлемой контрастности из документа «WCAG». Контрастность можно вычислить самому или воспользоваться для ее вычисления одним из веб-сервисов (например).
Заключение
Использование цвета в эмуляторах терминала может вызвать проблемы. Следует учитывать и обходить некоторые узкие моменты. Например, не стоит подсвечивать текст черным цветом при фоне цвета по умолчанию или не стоит подсвечивать фон белым цветом при тексте цвета по умолчанию. Кроме этого, вместо использования любых цветов, какие придут в голову, стоит рассмотреть возможность использования цветов из ограниченных палитр распространенных цветовых схем для терминалов. Это поможет сохранить рекомендуемую стандартами контрастность цветов, что сохранит зрение пользователям. Как вариант — создание собственной цветовой схемы для терминала. Но это не так просто, как кажется, а также может быть воспринято пользователем как навязывание цветовой схемы.