Список цветовых escape-последовательностей ANSI
На большинстве терминалов (за исключением Windows' cmd.exe, конечно) можно раскрасить вывод, используя \033
Escape-последовательность ANSI.
Сейчас я ищу список всех поддерживаемых цветов и опций (например, яркие и мигающие).
Поскольку между терминалами, поддерживающими их, вероятно, есть некоторые различия: меня в основном интересуют последовательности, поддерживаемые терминалами, совместимыми с xterm.
10 ответов
Требуемые escape-последовательности ANSI являются подмножеством Select Graphic Rendition. Все они имеют форму
\033[XXXm
где XXX
это серия разделенных точкой с запятой параметров.
Чтобы сделать текст красным, жирным и подчеркнутым (мы обсудим много других вариантов ниже) в C, вы можете написать:
printf("\033[31;1;4mHello\033[0m");
В C++ вы бы использовали
std::cout<<"\033[31;1;4mHello\033[0m";
В Python3 вы бы использовали
print("\033[31;1;4mHello\033[0m")
и в Bash вы бы использовали
echo -e "\033[31;1;4mHello\033[0m"
где первая часть делает текст красным (31
), смелый (1
), подчеркнут (4
) и последняя часть очищает все это (0
).
Как описано в таблице ниже, вы можете установить большое количество текстовых свойств, таких как жирность, шрифт, подчеркивание и т. Д. (Разве не глупо, что Stackru не позволяет вам ставить правильные таблицы в ответах?)
Эффекты шрифта
╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗
║ Code ║ Effect ║ Note ║
╠══════════╬════════════════════════════════╬═════════════════════════════════════════════════════════════════════════╣
║ 0 ║ Reset / Normal ║ all attributes off ║
║ 1 ║ Bold or increased intensity ║ ║
║ 2 ║ Faint (decreased intensity) ║ Not widely supported. ║
║ 3 ║ Italic ║ Not widely supported. Sometimes treated as inverse. ║
║ 4 ║ Underline ║ ║
║ 5 ║ Slow Blink ║ less than 150 per minute ║
║ 6 ║ Rapid Blink ║ MS-DOS ANSI.SYS; 150+ per minute; not widely supported ║
║ 7 ║ [[reverse video]] ║ swap foreground and background colors ║
║ 8 ║ Conceal ║ Not widely supported. ║
║ 9 ║ Crossed-out ║ Characters legible, but marked for deletion. Not widely supported. ║
║ 10 ║ Primary(default) font ║ ║
║ 11–19 ║ Alternate font ║ Select alternate font `n-10` ║
║ 20 ║ Fraktur ║ hardly ever supported ║
║ 21 ║ Bold off or Double Underline ║ Bold off not widely supported; double underline hardly ever supported. ║
║ 22 ║ Normal color or intensity ║ Neither bold nor faint ║
║ 23 ║ Not italic, not Fraktur ║ ║
║ 24 ║ Underline off ║ Not singly or doubly underlined ║
║ 25 ║ Blink off ║ ║
║ 27 ║ Inverse off ║ ║
║ 28 ║ Reveal ║ conceal off ║
║ 29 ║ Not crossed out ║ ║
║ 30–37 ║ Set foreground color ║ See color table below ║
║ 38 ║ Set foreground color ║ Next arguments are `5;n` or `2;r;g;b`, see below ║
║ 39 ║ Default foreground color ║ implementation defined (according to standard) ║
║ 40–47 ║ Set background color ║ See color table below ║
║ 48 ║ Set background color ║ Next arguments are `5;n` or `2;r;g;b`, see below ║
║ 49 ║ Default background color ║ implementation defined (according to standard) ║
║ 51 ║ Framed ║ ║
║ 52 ║ Encircled ║ ║
║ 53 ║ Overlined ║ ║
║ 54 ║ Not framed or encircled ║ ║
║ 55 ║ Not overlined ║ ║
║ 60 ║ ideogram underline ║ hardly ever supported ║
║ 61 ║ ideogram double underline ║ hardly ever supported ║
║ 62 ║ ideogram overline ║ hardly ever supported ║
║ 63 ║ ideogram double overline ║ hardly ever supported ║
║ 64 ║ ideogram stress marking ║ hardly ever supported ║
║ 65 ║ ideogram attributes off ║ reset the effects of all of 60-64 ║
║ 90–97 ║ Set bright foreground color ║ aixterm (not in standard) ║
║ 100–107 ║ Set bright background color ║ aixterm (not in standard) ║
╚══════════╩════════════════════════════════╩═════════════════════════════════════════════════════════════════════════╝
2-битные цвета
Вы уже получили это!
4-битные цвета
Стандарты, реализующие цвета терминала, начинались с ограниченных (4-битных) опций. В таблице ниже перечислены значения RGB цветов фона и переднего плана, используемые для них различными эмуляторами терминала:
Используя вышесказанное, вы можете сделать красный текст на зеленом фоне (но почему?), Используя:
\033[31;42m
11 Цветов (Интерлюдия)
В своей книге "Основные цветовые термины: их универсальность и эволюция" Брент Берлин и Пол Кей использовали данные, собранные на двадцати разных языках из разных языковых семейств, для определения одиннадцати возможных основных цветовых категорий: белый, черный, красный, зеленый, желтый, синий, коричневый, фиолетовый, розовый, оранжевый и серый.
Берлин и Кей обнаружили, что в языках с числом, не превышающим максимум одиннадцати цветовых категорий, цвета следовали определенной эволюционной схеме. Этот шаблон выглядит следующим образом:
- Все языки содержат термины для черного (холодные цвета) и белого (яркие цвета).
- Если язык содержит три термина, тогда он содержит термин для красного цвета.
- Если язык содержит четыре термина, то он содержит термин для зеленого или желтого (но не для обоих).
- Если язык содержит пять терминов, то он содержит термины как для зеленого, так и для желтого цвета.
- Если язык содержит шесть терминов, то он содержит термин для синего цвета.
- Если язык содержит семь терминов, то он содержит термин для коричневого цвета.
- Если язык содержит восемь или более терминов, то он содержит термины для фиолетового, розового, оранжевого или серого.
Возможно, поэтому история Беовульфа содержит только черный, белый и красный цвета. Возможно также, что в Библии нет синего цвета. Одиссея Гомера содержит черный почти 200 раз, а белый - около 100 раз. Красный появляется 15 раз, а желтый и зеленый появляются только 10 раз. ( Более подробная информация здесь)
Различия между языками также интересны: обратите внимание на обилие разных цветных слов, используемых в английском и китайском языках. Однако углубление в эти языки показывает, что каждый использует цвет по-разному. ( Дополнительная информация)
Вообще говоря, наименование, использование и группировка цветов на человеческих языках очень интересны. Теперь вернемся к шоу.
8 бит (256) цветов
Технология продвинулась, и стали доступны таблицы из 256 предварительно выбранных цветов, как показано ниже.
Используя это выше, вы можете сделать розовый текст следующим образом:
\033[38;5;206m #That is, \033[38;5;<FG COLOR>m
И сделать рано утром синий фон, используя
\033[48;5;57m #That is, \033[48;5;<BG COLOR>m
И, конечно, вы можете комбинировать это:
\033[38;5;206;48;5;57m
8-битные цвета расположены так:
0x00-0x07: standard colors (same as the 4-bit colours)
0x08-0x0F: high intensity colors
0x10-0xE7: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
0xE8-0xFF: grayscale from black to white in 24 steps
ВСЕ ЦВЕТА
Теперь мы живем в будущем, и полный спектр RGB доступен с использованием:
\033[38;2;<r>;<g>;<b>m #Select RGB foreground color
\033[48;2;<r>;<g>;<b>m #Select RGB background color
Таким образом, вы можете поместить розоватый текст на коричневатый фон, используя
\033[38;2;255;82;197;48;2;155;106;0mHello
Поддержка терминалов "истинного цвета" приведена здесь.
Многое из вышеперечисленного взято со страницы Википедии " Экранирующий код ANSI".
Эта страница имеет большое резюме:
Когда вы пишете escape-код ANSI\033[<color>m
, заменить<color>
с любым из приведенных ниже цветовых кодов. Например,\033[31m
будет красный цвет текста:
Я рекомендую эти статьи для дальнейшего изучения:
- https://notes.burke.libbey.me/ansi-escape-codes/
- https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html
PS: Признаюсь, я автор пакета . легкий и позволяет легко печатать красочный текст во многих терминалах. Просто установите пакет с помощьюpip install colorist
и введите:
from colorist import Color
print(f"Only {Color.CYAN}this part{Color.OFF} is in colour")
Более того, также поддерживает цвета, определенные как RGB, HSL или Hex, если ваш терминал поддерживает расширенные цвета ANSI:
from colorist import ColorRGB, BgColorRGB
dusty_pink = ColorRGB(194, 145, 164)
bg_steel_blue = BgColorRGB(70, 130, 180)
print(f"I want to use {dusty_pink}dusty pink{dusty_pink.OFF} and {bg_steel_blue}steel blue{bg_steel_blue.OFF} colors inside this paragraph")
from colorist import ColorHSL, BgColorHSL
mustard_green = ColorHSL(60, 56, 43)
bg_steel_gray = BgColorHSL(190, 2, 49)
print(f"I want to use {mustard_green}mustard green{mustard_green.OFF} and {bg_steel_gray}steel blue{bg_steel_gray.OFF} colors inside this paragraph")
from colorist import ColorHex, BgColorHex
watermelon_red = ColorHex("#ff5733")
bg_mint_green = BgColorHex("#99ff99")
print(f"I want to use {watermelon_red}watermelon pink{watermelon_red.OFF} and {bg_mint_green}mint green{bg_mint_green.OFF} colors inside this paragraph")
Дополнительные возможности с ColoristColoristColoristColorist :
Как насчет:
ECMA-48 - Функции управления для наборов кодированных символов, 5-е издание (июнь 1991 г.) - Стандарт, определяющий коды управления цветом, который, очевидно, также поддерживается xterm.
SGR 38 и 48 были первоначально зарезервированы ECMA-48, но были уточнены через несколько лет в совместном стандарте ITU, IEC и ISO, который состоит из нескольких частей и который (среди всего прочего) документирует SGR 38/48 контрольных последовательностей для прямого цвета и индексированного цвета:
- Информационные технологии. Открытая архитектура документов (ODA) и формат обмена: структуры документов. T.412. Международный союз электросвязи.
- Информационные технологии. Открытая архитектура документов (ODA) и формат обмена. Архитектура символьного содержимого. T.416. Международный союз электросвязи.
- Информационные технологии - открытая архитектура документов (ODA) и формат обмена: архитектуры содержимого символов. ИСО / МЭК 8613-6:1994. Международная Организация Стандартизации.
В этой таблице на странице Википедии есть столбец для xterm для escape-кодов ANSI
Есть еще несколько интересных и сопутствующая информация.
Для тех, кто не получает правильных результатов, кроме упомянутых языков, если вы используете C# для печати текста в окне консоли (терминала), вы должны заменить "\033" на "\ x1b". В Visual Basic это будет Chrw (27).
Это связано абсолютно с вашим терминалом. VTE не поддерживает мигание, если вы используете gnome-terminal
, tilda
, guake
, terminator
, xfce4-terminal
и так далее в соответствии с VTE, Вы не будете мигать.
Если вы используете хотите использовать мигать на VTE, вы должны использовать xterm
команда.
Вы можете использовать команду infocmp с именем терминала:
#infocmp vt100
#infocmp xterm
#infocmp vte
Например:
# infocmp vte
# Reconstructed via infocmp from file: /usr/share/terminfo/v/vte
vte|VTE aka GNOME Terminal,
am, bce, mir, msgr, xenl,
colors#8, cols#80, it#8, lines#24, ncv#16, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J,
cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
el=\E[K, enacs=\E)0, home=\E[H, hpa=\E[%i%p1%dG, ht=^I,
hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m,
is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8,
kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~,
kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C,
kb2=\E[E, kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kf1=\EOP,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P,
kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~,
kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~,
kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~,
kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R,
kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~,
kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~,
kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~,
kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS,
kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~,
kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~,
kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R,
kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khome=\EOH,
kich1=\E[2~, kind=\E[1;2B, kmous=\E[M, knp=\E[6~,
kpp=\E[5~, kri=\E[1;2A, kslt=\E[4~, meml=\El, memu=\Em,
op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, ritm=\E[23m,
rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l,
rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\Ec,
rs2=\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h,
sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;,
sgr0=\E[0m\017, sitm=\E[3m, smacs=^N, smam=\E[?7h,
smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,
Вот некоторый код, который показывает все escape-последовательности, связанные с цветом. Возможно, вам потребуется получить фактический escape-символ, чтобы код работал.
@echo off
:top
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.
echo [101;93m NORMAL FOREGROUND COLORS [0m
echo ^<ESC^>[30m [30mBlack[0m (black)
echo ^<ESC^>[31m [31mRed[0m
echo ^<ESC^>[32m [32mGreen[0m
echo ^<ESC^>[33m [33mYellow[0m
echo ^<ESC^>[34m [34mBlue[0m
echo ^<ESC^>[35m [35mMagenta[0m
echo ^<ESC^>[36m [36mCyan[0m
echo ^<ESC^>[37m [37mWhite[0m
echo.
echo [101;93m NORMAL BACKGROUND COLORS [0m
echo ^<ESC^>[40m [40mBlack[0m
echo ^<ESC^>[41m [41mRed[0m
echo ^<ESC^>[42m [42mGreen[0m
echo ^<ESC^>[43m [43mYellow[0m
echo ^<ESC^>[44m [44mBlue[0m
echo ^<ESC^>[45m [45mMagenta[0m
echo ^<ESC^>[46m [46mCyan[0m
echo ^<ESC^>[47m [47mWhite[0m (white)
echo.
echo [101;93m STRONG FOREGROUND COLORS [0m
echo ^<ESC^>[90m [90mWhite[0m
echo ^<ESC^>[91m [91mRed[0m
echo ^<ESC^>[92m [92mGreen[0m
echo ^<ESC^>[93m [93mYellow[0m
echo ^<ESC^>[94m [94mBlue[0m
echo ^<ESC^>[95m [95mMagenta[0m
echo ^<ESC^>[96m [96mCyan[0m
echo ^<ESC^>[97m [97mWhite[0m
echo.
echo [101;93m STRONG BACKGROUND COLORS [0m
echo ^<ESC^>[100m [100mBlack[0m
echo ^<ESC^>[101m [101mRed[0m
echo ^<ESC^>[102m [102mGreen[0m
echo ^<ESC^>[103m [103mYellow[0m
echo ^<ESC^>[104m [104mBlue[0m
echo ^<ESC^>[105m [105mMagenta[0m
echo ^<ESC^>[106m [106mCyan[0m
echo ^<ESC^>[107m [107mWhite[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^<ESC^>[31m [31mred foreground color[0m
echo ^<ESC^>[7m [7minverse foreground ^<-^> background[0m
echo ^<ESC^>[7;31m [7;31minverse red foreground color[0m
echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m
echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m
pause > nul
goto top
Если вы используете оболочку TCC (а для работы с CMD требуется всего лишь изменить одну или две строки, поскольку я использую %@CHAR, который специфичен для TCC), вот удобный скрипт, который позволяет вам тестировать большинство ansi с помощью удобных переменных среды. . Вот мои результаты с Windows Terminal, который поддерживает многое, но не все, включая двойную высоту и широкие линии:
rem ANSI: Initialization
rem set up basic beginning of all ansi codes
set ESCAPE=%@CHAR[27]
set ANSI_ESCAPE=%@CHAR[27][
set ANSIESCAPE=%ANSI_ESCAPE%
rem ANSI: special stuff: reset
set ANSI_RESET=%ANSI_ESCAPE%0m
set ANSIRESET=%ANSI_RESET%
rem ANSI: special stuff: position save/restore
set ANSI_POSITION_SAVE=%ESCAPE%7%ANSI_ESCAPE%s %+ REM we do this the DEC way, then the SCO way
set ANSI_POSITION_RESTORE=%ESCAPE%8%ANSI_ESCAPE%u %+ REM we do this the DEC way, then the SCO way
set ANSI_SAVE_POSITION=%ANSI_POSITION_SAVE%
set ANSI_RESTORE_POSITION=%ANSI_POSITION_RESTORE%
set ANSI_POSITION_REQUEST=%ANSI_ESCAPE%6n %+ REM request cursor position (reports as ESC[#;#R)
set ANSI_REQUEST_POSITION=%ANSI_POSITION_REQUEST%
rem ANSI: position movement
rem To Home
set ANSI_HOME=%ANSI_ESCAPE%H %+ REM moves cursor to home position (0, 0)
set ANSI_MOVE_HOME=%ANSI_HOME%
set ANSI_MOVE_TO_HOME=%ANSI_HOME%
rem To a specific position
function ANSI_MOVE_TO_POS1=`%@CHAR[27][%1;%2H` %+ rem moves cursor to line #, column #\_____ both work
function ANSI_MOVE_TO_POS2=`%@CHAR[27][%1;%2f` %+ rem moves cursor to line #, column #/
function ANSI_MOVE_POS=`%@CHAR[27][%1;%2H` %+ rem alias
function ANSI_MOVE=`%@CHAR[27][%1;%2H` %+ rem alias
function ANSI_MOVE_TO_COL=`%@CHAR[27][%1G` %+ rem moves cursor to column #
function ANSI_MOVE_TO_ROW=`%@CHAR[27][%1H` %+ rem unfortunately does not preserve column position! not possible! cursor request ansi code return value cannot be captured
rem Up/Down/Left/Right
set ANSI_MOVE_UP_1=%ESCAPE%M %+ rem moves cursor one line up, scrolling if needed
set ANSI_MOVE_UP_ONE=%ANSI_MOVE_UP_1% %+ rem alias
function ANSI_MOVE_UP=`%@CHAR[27][%1A` %+ rem moves cursor up # lines
function ANSI_UP=`%@CHAR[27][%1A` %+ rem alias
function ANSI_MOVE_DOWN=`%@CHAR[27][%1B` %+ rem moves cursor down # lines
function ANSI_DOWN=`%@CHAR[27][%1B` %+ rem alias
function ANSI_MOVE_RIGHT=`%@CHAR[27][%1C` %+ rem moves cursor right # columns
function ANSI_RIGHT=`%@CHAR[27][%1C` %+ rem alias
function ANSI_MOVE_LEFT=`%@CHAR[27][%1D` %+ rem moves cursor left # columns
function ANSI_LEFT=`%@CHAR[27][%1D` %+ rem alias
rem Line-based
function ANSI_MOVE_LINES_DOWN=`%@CHAR[27][%1E` %+ rem moves cursor to beginning of next line, # lines down
function ANSI_MOVE_LINES_UP=`%@CHAR[27][%1F` %+ rem moves cursor to beginning of previous line, # lines up
rem ANIS: colors
rem custom rgb colors
set ANSI_RGB_PREFIX=%ANSI_ESCAPE%38;2;
set ANSI_RGB_SUFFIX=m
function ANSI_RGB=`%@CHAR[27][38;2;%1;%2;%3m`
function ANSI_FG=`%@CHAR[27][38;2;%1;%2;%3m` %+ rem alias
function ANSI_RGB_FG=`%@CHAR[27][38;2;%1;%2;%3m` %+ rem alias
function ANSI_FG_RGB=`%@CHAR[27][38;2;%1;%2;%3m` %+ rem alias
function ANSI_RGB_BG=`%@CHAR[27][48;2;%1;%2;%3m`
function ANSI_BG=`%@CHAR[27][48;2;%1;%2;%3m` %+ rem alias
function ANSI_BG_RGB=`%@CHAR[27][48;2;%1;%2;%3m` %+ rem alias
rem Foreground Colors
set ANSI_BLACK=%ANSI_ESCAPE%30m
set ANSI_RED=%ANSI_ESCAPE%31m
set ANSI_GREEN=%ANSI_ESCAPE%32m
set ANSI_YELLOW=%ANSI_ESCAPE%33m
set ANSI_BLUE=%ANSI_ESCAPE%34m
set ANSI_MAGENTA=%ANSI_ESCAPE%35m
set ANSI_CYAN=%ANSI_ESCAPE%36m
set ANSI_WHITE=%ANSI_ESCAPE%37m
set ANSI_GRAY=%ANSI_ESCAPE%90m
set ANSI_GREY=%ANSI_ESCAPE%90m
set ANSI_BRIGHT_RED=%ANSI_ESCAPE%91m
set ANSI_BRIGHT_GREEN=%ANSI_ESCAPE%92m
set ANSI_BRIGHT_YELLOW=%ANSI_ESCAPE%93m
set ANSI_BRIGHT_BLUE=%ANSI_ESCAPE%94m
set ANSI_BRIGHT_MAGENTA=%ANSI_ESCAPE%95m
set ANSI_BRIGHT_CYAN=%ANSI_ESCAPE%96m
set ANSI_BRIGHT_WHITE=%ANSI_ESCAPE%97m
rem Background Colors
set ANSI_BLACKGROUND_BLACK=%@ANSI_BG[0,0,0]
set ANSI_BACKGROUND_BLACK_NON_EXPERIMENTAL=%ANSI_ESCAPE%40m
set ANSI_BACKGROUND_RED=%ANSI_ESCAPE%41m
set ANSI_BACKGROUND_GREEN=%ANSI_ESCAPE%42m
set ANSI_BACKGROUND_YELLOW=%ANSI_ESCAPE%43m
set ANSI_BACKGROUND_BLUE=%ANSI_ESCAPE%44m
set ANSI_BACKGROUND_MAGENTA=%ANSI_ESCAPE%45m
set ANSI_BACKGROUND_CYAN=%ANSI_ESCAPE%46m
set ANSI_BACKGROUND_WHITE=%ANSI_ESCAPE%47m
set ANSI_BACKGROUND_GREY=%ANSI_ESCAPE%100m
set ANSI_BACKGROUND_GRAY=%ANSI_ESCAPE%100m
set ANSI_BACKGROUND_BRIGHT_RED=%ANSI_ESCAPE%101m
set ANSI_BACKGROUND_BRIGHT_GREEN=%ANSI_ESCAPE%102m
set ANSI_BACKGROUND_BRIGHT_YELLOW=%ANSI_ESCAPE%103m
set ANSI_BACKGROUND_BRIGHT_BLUE=%ANSI_ESCAPE%104m
set ANSI_BACKGROUND_BRIGHT_MAGENTA=%ANSI_ESCAPE%105m
set ANSI_BACKGROUND_BRIGHT_CYAN=%ANSI_ESCAPE%106m
set ANSI_BACKGROUND_BRIGHT_WHITE=%ANSI_ESCAPE%107m
REM As of Windows Terminal we can now actually display italic characters
REM 0m=reset, 1m=bold, 2m=faint, 3m=italic, 4m=underline, 5m=blink slow, 6m=blink fast, 7m=reverse, 8m=conceal, 9m=strikethrough
set ANSI_BOLD=%ANSI_ESCAPE%1m
set ANSI_BOLD_ON=%ANSI_BOLD%
set ANSI_BOLD_OFF=%ANSI_ESCAPE%22m
set BOLD_ON=%ANSI_BOLD_ON%
set BOLD_OFF=%ANSI_BOLD_OFF%
set BOLD=%BOLD_ON%
set ANSI_FAINT=%ANSI_ESCAPE%2m
set ANSI_FAINT_ON=%ANSI_FAINT%
set ANSI_FAINT_OFF=%ANSI_ESCAPE%22m
set FAINT_ON=%ANSI_FAINT_ON%
set FAINT_OFF=%ANSI_FAINT_OFF%
set FAINT=%FAINT_ON%
set ANSI_ITALICS=%ANSI_ESCAPE%3m
set ANSI_ITALICS_ON=%ANSI_ITALICS%
set ANSI_ITALICS_OFF=%ANSI_ESCAPE%23m
set ITALICS_ON=%ANSI_ITALICS_ON%
set ITALICS_OFF=%ANSI_ITALICS_OFF%
set ITALICS=%ITALICS_ON%
set ANSI_UNDERLINE=%ANSI_ESCAPE%4m
set ANSI_UNDERLINE_ON=%ANSI_UNDERLINE%
set ANSI_UNDERLINE_OFF=%ANSI_ESCAPE%24m
set UNDERLINE_ON=%ANSI_UNDERLINE_ON%
set UNDERLINE_OFF=%ANSI_UNDERLINE_OFF%
set UNDERLINE=%UNDERLINE_ON%
set ANSI_OVERLINE=%ANSI_ESCAPE%53m
set ANSI_OVERLINE_ON=%ANSI_OVERLINE%
set ANSI_OVERLINE_OFF=%ANSI_ESCAPE%55m
set OVERLINE_ON=%ANSI_OVERLINE_ON%
set OVERLINE_OFF=%ANSI_OVERLINE_OFF%
set OVERLINE=%OVERLINE_ON%
set ANSI_DOUBLE_UNDERLINE=%ANSI_ESCAPE%21m
set ANSI_DOUBLE_UNDERLINE_ON=%ANSI_DOUBLE_UNDERLINE%
set ANSI_DOUBLE_UNDERLINE_OFF=%ANSI_ESCAPE%24m
set DOUBLE_UNDERLINE_ON=%ANSI_DOUBLE_UNDERLINE_ON%
set DOUBLE_UNDERLINE_OFF=%ANSI_DOUBLE_UNDERLINE_OFF%
set DOUBLE_UNDERLINE=%DOUBLE_UNDERLINE_ON%
set ANSI_UNDERLINE_DOUBLE=%ANSI_DOUBLE_UNDERLINE%
set ANSI_UNDERLINE_DOUBLE_ON=%ANSI_DOUBLE_UNDERLINE_ON%
set ANSI_UNDERLINE_DOUBLE_OFF=%ANSI_DOUBLE_UNDERLINE_OFF%
set UNDERLINE_DOUBLE_ON=%DOUBLE_UNDERLINE_ON%
set UNDERLINE_DOUBLE_OFF=%DOUBLE_UNDERLINE_OFF%
set UNDERLINE_DOUBLE=%DOUBLE_UNDERLINE%
set ANSI_BLINK_SLOW=%ANSI_ESCAPE%5m
set ANSI_BLINK_SLOW_ON=%ANSI_BLINK_SLOW%
set ANSI_BLINK_SLOW_OFF=%ANSI_ESCAPE%25m
set BLINK_SLOW_ON=%ANSI_BLINK_SLOW_ON%
set BLINK_SLOW_OFF=%ANSI_BLINK_SLOW_OFF%
set BLINK_SLOW=%BLINK_SLOW_ON%
set ANSI_BLINK_FAST=%ANSI_ESCAPE%6m
set ANSI_BLINK_FAST_ON=%ANSI_BLINK_FAST%
set ANSI_BLINK_FAST_OFF=%ANSI_ESCAPE%25m
set BLINK_FAST_ON=%ANSI_BLINK_FAST_ON%
set BLINK_FAST_OFF=%ANSI_BLINK_FAST_OFF%
set BLINK_FAST=%BLINK_FAST_ON%
set ANSI_BLINK=%ANSI_BLINK_FAST%
set ANSI_BLINK_ON=%ANSI_BLINK_FAST_ON%
set ANSI_BLINK_OFF=%ANSI_BLINK_FAST_OFF%
set BLINK_ON=%ANSI_BLINK_ON%
set BLINK_OFF=%ANSI_BLINK_OFF%
set BLINK=%BLINK_ON%
set ANSI_REVERSE=%ANSI_ESCAPE%7m
set ANSI_REVERSE_ON=%ANSI_REVERSE%
set ANSI_REVERSE_OFF=%ANSI_ESCAPE%27m
set REVERSE_ON=%ANSI_REVERSE_ON%
set REVERSE_OFF=%ANSI_REVERSE_OFF%
set REVERSE=%REVERSE_ON%
set ANSI_CONCEAL=%ANSI_ESCAPE%8m
set ANSI_CONCEAL_ON=%ANSI_CONCEAL%
set ANSI_CONCEAL_OFF=%ANSI_ESCAPE%28m
set CONCEAL_ON=%ANSI_CONCEAL_ON%
set CONCEAL_OFF=%ANSI_CONCEAL_OFF%
set CONCEAL=%CONCEAL_ON%
set ANSI_STRIKETHROUGH=%ANSI_ESCAPE%9m
set ANSI_STRIKETHROUGH_ON=%ANSI_STRIKETHROUGH%
set ANSI_STRIKETHROUGH_OFF=%ANSI_ESCAPE%29m
set STRIKETHROUGH_ON=%ANSI_STRIKETHROUGH_ON%
set STRIKETHROUGH_OFF=%ANSI_STRIKETHROUGH_OFF%
set STRIKETHROUGH=%STRIKETHROUGH_ON%
set OVERSTRIKE_ON=%STRIKETHROUGH_ON%
set OVERSTRIKE_OFF=%STRIKETHROUGH_OFF%
set OVERSTRIKE=%OVERSTRIKE_ON%
REM wow it even supports the vt100 2-line-tall text!
set BIG_TEXT_LINE_1=%ESCAPE%#3
set BIG_TEXT_LINE_2=%ESCAPE%#4
set WIDE=%ESCAPE%#6
set WIDE_ON=%WIDE%
set WIDELINE=%WIDE%
set WIDE_LINE=%WIDE%
set WIDE_OFF=%ESCAPE%#5
set BIG_TOP=%BIG_TEXT_LINE_1%
set BIG_TOP_ON=%BIG_TOP%
set BIG_BOT=%BIG_TEXT_LINE_2%
set BIG_BOT_ON=%BIG_BOT%
set BIG_BOTTOM=%BIG_BOT%
set BIG_BOTTOM_ON=%BIG_BOTTOM%
REM this is a guess:
set BIG_TEXT_END=%ESCAPE%#0
set BIG_OFF=%BIG_TEXT_END%
set BIG_TOP_OFF=%BIG_OFF%
set BIG_BOT_OFF=%BIG_OFF%
REM test strings that demonstrate all this ANSI functionality
set ANSI_TEST_STRING=concealed:'%CONCEAL%conceal%CONCEAL_off%' %ANSI_RED%R%ANSI_ORANGE%O%ANSI_YELLOW%Y%ANSI_GREEN%G%ANSI_CYAN%C%ANSI_BLUE%B%ANSI_MAGENTA%V%ANSI_WHITE% Hello, world. %BOLD%Bold!%BOLD_OFF% %FAINT%Faint%FAINT_OFF% %ITALICS%Italics%ITALIC_OFF% %UNDERLINE%underline%UNDERLINE_OFF% %OVERLINE%overline%OVERLINE_OFF% %DOUBLE_UNDERLINE%double_underline%DOUBLE_UNDERLINE_OFF% %REVERSE%reverse%REVERSE_OFF% %BLINK_SLOW%blink_slow%BLINK_SLOW_OFF% [non-blinking] %BLINK_FAST%blink_fast%BLINK_FAST_OFF% [non-blinking] %blink%blink_default%blink_off% [non-blinking] %STRIKETHROUGH%strikethrough%STRIKETHROUGH_OFF%
set ANSI_TEST_STRING_2=%BIG_TEXT_LINE_1%big% %ANSI_RESET% Normal One
set ANSI_TEST_STRING_3=%BIG_TEXT_LINE_2%big% %ANSI_RESET% Normal Two
set ANSI_TEST_STRING_4=%WIDE_LINE%A wide line!
if "%1" eq "test" (
echo %ANSI_TEST_STRING%
echo %ANSI_TEST_STRING_2%
echo %ANSI_TEST_STRING_3%
echo %ANSI_TEST_STRING_4%
)
REM unrelated to colors, but nice-to-have variables:
set QUOTE=%@CHAR[34]
set TAB=%CHAR[9]
set NEWLINE=%@CHAR[12]%@CHAR[13]
PowerShell
Более полный список именованных цветов (Windows), включая их коды ANSI RGB, см. в моем полном ответе .