Как поменять цвет текста в терминале windows

Загрузить PDF

Загрузить PDF

Вам надоело постоянно видеть стандартный белый текст на черном фоне в командной строке? Если да, тогда читайте дальше, чтобы узнать, как изменить цвет текста и фона.

  1. Step 1 Нажмите сочетание клавиш Windows + R для открытия окна «Выполнить».

  2. Step 2 Введите cmd и нажмите «OK».

  3. Step 3 Введите color z,...

    Введите color z, чтобы получить список всех цветов и цифры или буквы, которые им соответствуют. Первые буква/цифра — это цвет фона, а вторая — цвет текста.

  4. Step 4 Введите букву/цифру цвета, чтобы изменить цвет текста.

    Например, введите color 6, чтобы получился желтый текст, color 4 для красного цвета, color A для изменения текста в светло-зеленую окраску и так далее.

  5. Step 5 Для изменения цвета...

    Для изменения цвета текста, а также его фона, введите color ce, чтобы получился светло-желтый текст на светло-красном фоне, или любую другую комбинацию. Первая буква/цифра обозначает цвет фона, а вторая соотносится с цветом текста.

    Реклама

  1. Step 1 Запустите командную строку.

  2. Step 2 Щелкните сверху правой кнопкой мыши.

  3. Step 3 Выберите «Свойства».

  4. Step 4 Перейдите на вкладку «Цвета».

  5. Step 5 Выберите свойства текста...

    Выберите свойства текста или фона и отредактируйте цветовые значения.

    • Поэкспериментируйте с различными комбинациями!
  6. Step 6 Щелкните по кнопке «OK» для сохранения изменений.

    Реклама

Список возможных расцветок

  • 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:

How-cmd-looks

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

Changing-Background-and-Text-Color-in-cmd

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

Changing-Background-and-Color-Text-in-cmd-1

Note: To get all the related information on using color command in Command Prompt you can use the following command

color /?

Getting-the-color-attributes-information-of-cmd

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/?”
    command prompt

  • 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”
    command prompt color type 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» с использованием слота из палитры этих цветовых схем:

Как видно из вышеприведенной иллюстрации, такое использование цвета выглядит намного приятнее. Тут мы не выдумываем своё, а полагаемся на уже придуманное другими людьми цветовое решение. Контрастность цвета из «желтого» слота палитры двух указанных цветовых схем по сравнению с цветом фона по умолчанию:

  1. «One Half Dark»: #E5C07B «желтый» и #282C34 (фон по умолчанию) — 8,1:1;

  2. «One Half Light»: #C18301 «желтый» и #FAFAFA (фон по умолчанию) — 3,08:1.

Оба варианта удовлетворяют критерию приемлемой контрастности из документа «WCAG». Контрастность можно вычислить самому или воспользоваться для ее вычисления одним из веб-сервисов (например).

Заключение

Использование цвета в эмуляторах терминала может вызвать проблемы. Следует учитывать и обходить некоторые узкие моменты. Например, не стоит подсвечивать текст черным цветом при фоне цвета по умолчанию или не стоит подсвечивать фон белым цветом при тексте цвета по умолчанию. Кроме этого, вместо использования любых цветов, какие придут в голову, стоит рассмотреть возможность использования цветов из ограниченных палитр распространенных цветовых схем для терминалов. Это поможет сохранить рекомендуемую стандартами контрастность цветов, что сохранит зрение пользователям. Как вариант — создание собственной цветовой схемы для терминала. Но это не так просто, как кажется, а также может быть воспринято пользователем как навязывание цветовой схемы.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как изменить герцовку монитора windows 10 nvidia
  • Автовход windows 10 regedit
  • Отображение содержимого окна при перетаскивании windows 10 что это
  • Удалил загрузчик windows 10 как восстановить
  • Ошибка при возвращении в исходное состояние windows 10