在大多数终端上,可以使用\033 ANSI转义序列对输出进行着色。
我正在寻找所有支持的颜色和选项的列表(如明亮和闪烁)。
由于支持它们的终端之间可能存在差异,因此我主要对xterm兼容终端支持的序列感兴趣。
在大多数终端上,可以使用\033 ANSI转义序列对输出进行着色。
我正在寻找所有支持的颜色和选项的列表(如明亮和闪烁)。
由于支持它们的终端之间可能存在差异,因此我主要对xterm兼容终端支持的序列感兴趣。
如何:
编码字符集的控制函数,第5版(1991年6月) 定义颜色控制代码的标准,显然xterm也支持该标准。
SGR 38和48最初由ECMA-48保留,但几年后在联合ITU、IEC和ISO标准中得到了补充,该标准分为几个部分,并(在许多其他方面)记录了直接颜色和索引颜色的SGR 38/48控制序列:
信息技术。开放文档体系结构(ODA)和交换格式:文档结构T.412。国际电信联盟。 信息技术。开放文档体系结构和交换格式:字符内容体系结构T.416。国际电信联盟。 信息技术。开放文档架构(ODA)和交换格式:字符内容架构ISO / IEC 8613 - 6:1994。国际标准化组织。
在维基百科的ANSI转义码表中有一列xterm
还有一些更有趣的和相关的信息。
http://wiki.bash-hackers.org/scripting/terminalcodes http://www.termsys.demon.co.uk/vtansi.htm(死了;archive.org快照) http://invisible-island.net/xterm/ctlseqs/ctlseqs.html http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/c327.html https://wiki.archlinux.org/index.php/Color_Bash_Prompt
您正在寻找的ANSI转义序列是“选择图形再现”子集。所有这些都有形式
\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)。
如下表所示,您可以设置大量的文本属性,如粗体、字体、下划线等。
字体效果
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种颜色(插曲)
在他们的书《基本颜色术语:它们的普遍性和演变》中,Brent Berlin和Paul Kay使用从20种不同语言中收集的数据,从一系列语系中确定了11种可能的基本颜色类别:白色、黑色、红色、绿色、黄色、蓝色、棕色、紫色、粉红色、橙色和灰色。
柏林和凯发现,在少于最多11种颜色类别的语言中,颜色遵循特定的进化模式。这种模式如下:
All languages contain terms for black (cool colours) and white (bright colours). If a language contains three terms, then it contains a term for red. If a language contains four terms, then it contains a term for either green or yellow (but not both). If a language contains five terms, then it contains terms for both green and yellow. If a language contains six terms, then it contains a term for blue. If a language contains seven terms, then it contains a term for brown. If a language contains eight or more terms, then it contains terms for purple, pink, orange or gray.
这可能就是为什么故事贝奥武夫只包含黑色、白色和红色。这也可能是为什么《圣经》中没有蓝色。《荷马的奥德赛》中,黑色出现了近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转义代码”。
一个方便的提醒自己的脚本
因为我经常在试图记住什么颜色是什么,我有一个方便的脚本叫做:~/bin/ ansi_colors:
#!/usr/bin/python
print "\\033[XXm"
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 colour"
print "\\033[2K - Clear Line"
print "\\033[<L>;<C>H OR \\033[<L>;<C>f puts 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"
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"
print " "
print "\\033[4m Underline on"
print "\\033[24m Underline off"
print "\\033[1m Bold on"
print "\\033[21m Bold off"
这个打印
它绝对与你的终端有关。VTE不支持闪烁,如果你根据VTE使用gnome-terminal, tilda, guake, terminator, xfce4-terminal等,你将不会有闪烁。 如果你想在VTE上使用blink,你必须使用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,
对于那些除了上述语言之外没有得到正确结果的人,如果你使用c#将文本打印到控制台(终端)窗口,你应该将“\033”替换为“\x1b”。在Visual Basic中是Chrw(27)。
下面是一些代码,它显示了所有与颜色有关的转义序列。为了使代码正常工作,您可能需要获得实际的转义字符。
@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