在大多数终端中,可以使用 \033
ANSI 转义序列来给输出内容上色。
我正在寻找一个列出所有支持的颜色和选项(如明亮和闪烁)的列表。
由于不同支持它们的终端之间可能存在差异,因此我主要关注 xterm 兼容终端支持的序列。
在大多数终端中,可以使用 \033
ANSI 转义序列来给输出内容上色。
我正在寻找一个列出所有支持的颜色和选项(如明亮和闪烁)的列表。
由于不同支持它们的终端之间可能存在差异,因此我主要关注 xterm 兼容终端支持的序列。
\033[XXXm
其中XXX
是一系列以分号分隔的参数。
要在C语言中将文本设置为红色、加粗和下划线(我们将在下面讨论其他选项),你可以这样写:
printf("\033[31;1;4mHello\033[0m");
std::cout<<"\033[31;1;4mHello\033[0m";
print("\033[31;1;4mHello\033[0m")
echo -e "\033[31;1;4mHello\033[0m"
第一部分将文本设置为红色(31
),加粗(1
),下划线(4
),而最后一部分清除所有这些效果(0
)。
如下表所述,您可以设置许多文本属性,例如加粗、字体、下划线等。
你已经掌握了这个!
实现终端颜色的标准最初只有有限的(4位)选项。下表列出了各种终端模拟器使用的背景和前景颜色的RGB值:
\033[31;42m
在他们的书籍《基本颜色术语:它们的普遍性和演变》中,布伦特·柏林和保罗·凯利用从二十种不同语言中收集的数据,来确定了十一种可能的基本颜色类别:白色、黑色、红色、绿色、黄色、蓝色、棕色、紫色、粉红色、橙色和灰色。
柏林和凯发现,在拥有少于最大十一种颜色类别的语言中,颜色遵循着特定的演化模式。这个模式如下:
\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
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转义代码”。
由于我经常需要记住各种颜色是什么,所以我有一个方便的脚本叫做:~/bin/ansi_colours
:
#!/usr/bin/env python3
for i in range(30, 37 + 1):
print("\033[%dm%d\t\t\033[%dm%d" % (i, i, i + 60, i + 60))
print("\033[39m\\033[49m - Reset color")
print("\\033[2K - Clear Line")
print("\\033[<L>;<C>H or \\033[<L>;<C>f - Put the cursor at line L and column C.")
print("\\033[<N>A - Move the cursor up N lines")
print("\\033[<N>B - Move the cursor down N lines")
print("\\033[<N>C - Move the cursor forward N columns")
print("\\033[<N>D - Move the cursor backward N columns\n")
print("\\033[2J - Clear the screen, move to (0,0)")
print("\\033[K - Erase to end of line")
print("\\033[s - Save cursor position")
print("\\033[u - Restore cursor position\n")
print("\\033[4m - Underline on")
print("\\033[24m - Underline off\n")
print("\\033[1m - Bold on")
print("\\033[21m - Bold off")
这打印
代码 | 效果 | 备注 |
---|---|---|
0 | 重置/正常 | 关闭所有属性 |
1 | 加粗或增加强度 | |
2 | 淡化(降低强度) | 支持程度有限。 |
3 | 斜体 | 支持程度有限。有时被视为反色。 |
4 | 下划线 | |
5 | 慢闪烁 | 每分钟不超过150次 |
6 | 快闪烁 | MS-DOS ANSI.SYS;每分钟150次以上;支持程度有限 |
7 | [[反显]] | 交换前景色和背景色 |
8 | 隐藏 | 支持程度有限。 |
9 | 删除线 | 字符可读,但标记为删除。支持程度有限。 |
10 | 主要(默认)字体 | |
11–19 | 备用字体 | 选择备用字体n-10 |
20 | Fraktur字体 | 几乎不被支持 |
21 | 关闭加粗或双下划线 | 关闭加粗的支持程度有限;双下划线几乎不被支持。 |
22 | 正常颜色或强度 | 既不加粗也不淡化 |
23 | 非斜体,非Fraktur字体 | |
24 | 关闭下划线 | 没有单下划线或双下划线 |
25 | 关闭闪烁 | |
27 | 关闭反显 | |
28 | 显示隐藏内容 | 关闭隐藏 |
29 | 取消删除线 | |
30–37 | 设置前景色 | 参见下面的颜色表 |
38 | 设置前景色 | 下一个参数是5;<n> 或2;<r>;<g>;<b> ,参见下面 |
39 | 默认前景色 | 根据标准定义(实现定义) |
40–47 | 设置背景色 | 参见下面的颜色表 |
48 | 设置背景色 | 下一个参数是5;<n> 或2;<r>;<g>;<b> ,参见下面 |
如何看待:
ECMA-48 - 编码字符集控制功能,第五版(1991年6月) - 这是一个标准,定义了颜色控制代码,并且显然也被xterm支持。
SGR 38和48最初由ECMA-48保留,但在几年后,它们在ITU、IEC和ISO的合作下得到了充实,在多个部分中记录了直接颜色和索引颜色的SGR 38/48控制序列,其中还有许多其他内容:
在维基百科上的ANSI转义码页面上,有一个适用于xterm的表格
\033[<color>m
时,将 <color>
替换为下面的任何颜色代码。例如,\033[31m
将是红色文本颜色:
颜色 | 示例 | 文本 | 背景 | 亮文本 | 亮背景 |
---|---|---|---|---|---|
黑色 | 30 | 40 | 90 | 100 | |
红色 | 31 | 41 | 91 | 101 | |
绿色 | 32 | 42 | 92 | 102 | |
黄色 | 33 | 43 | 93 | 103 | |
蓝色 | 34 | 44 | 94 | 104 | |
洋红 | 35 | 45 | 95 | 105 | |
青色 | 36 | 46 | 96 | 106 | |
白色 | 37 | 47 | 97 | 107 | |
默认 | 39 | 49 | 99 | 109 |
\033[0m
。否则,任何颜色或样式可能会溢出并影响其他终端消息。效果 | 开启 | 关闭 | 示例 |
---|---|---|---|
加粗 | 1 | 21 | |
变暗 | 2 | 22 | |
下划线 | 4 | 24 | |
闪烁 | 5 | 25 | |
反转 | 7 | 27 | |
隐藏 | 8 | 28 |
pip install colorist
安装该软件包,然后输入以下命令即可:from colorist import Color
print(f"Only {Color.CYAN}this part{Color.OFF} is in colour")
此外,Colorist 还支持以 RGB、HSL 或十六进制定义的颜色,如果您的终端支持高级 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")
更多与调色师的选择:
对于那些除了上述语言外没有得到正确结果的人,如果您正在使用 C# 将文本打印到控制台(终端)窗口中,您应该将 "\033" 替换为 "\x1b"。在 Visual Basic 中,应该使用 Chrw(27)。
(char) 27
或 "\u001b"
- Jesse Glick\033
或者\33
可以正常工作,就像许多其他编程语言一样。 - Holger这与你的终端完全相关。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,
这里有一些与颜色相关的转义序列代码。您可能需要获取实际的转义字符才能使代码正常工作。
@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
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]
echo -e "\033[38;05;34;1mHi"
和echo -e "\033[38;05;34m\033[1mHi"
都能正常使用,但是在我测试的终端中,反锯齿字体效果会导致粗体下颜色略有变化。 - Richard\033[
)代码以38和48开头,应该使用否则保留的:
作为子分隔符进行分隔,尽管这在主要来源(http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf和https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-T.416-199303-I!!PDF-E&type=items)中并不完全清楚。另外,一些解释在`2`(16M-彩色RGB)/`3`(16M-彩色CMY)/`4`(??? CMYK)形式中忘记了颜色空间Id - 例如,白色16M前景色应为\033[38:2::255:255:255m
而不是\033[38:2:255:255:255m
! - SlySven