问题描述
最开始,我们只想寻找一个 IRC 客户端,该客户端具有高亮字体、设置背景色等等特性。但是,却有了意外收获。
IRC Colors,是一个轻量级子协议,需要客户端的支持。该协议定义了一系列“特殊字符序列”,当客户端遇到这些特殊序列时,需要对文本内容进行处理(比如字体加粗、倾斜等等),然后再进行显示。
如下示例,^BHello World^B 将显示为加粗的 Hello World 消息(其中 ^B 为 Ctrl+B 即 STX 字符):
该笔记将记录:在 IRC 中,发送彩色消息的相关问题。
解决方案
控制字体样式
正如最开始的介绍,我们还可以发送其他样式的字体,比如下划线、斜体等等。
Format | Code Point | Shortcuts | Description |
---|---|---|---|
Bold | 0x02 | Ctrl+B | 粗体 |
Italics | 0x1D | Ctrl+I | 斜体 |
Underline | 0x1F | Ctrl+U | 下划线 |
Reverse | 0x16 | Ctrl+R | 反转背景与前景色(字体颜色) |
Plain | 0x0F | Ctrl+O | 恢复默认样式 |
控制字体颜色
除了控制字体样式,还可以控制字体颜色,Code Point = 0x03,快捷键为 Ctrl+K 或 Ctrl+C(取决于客户端,有的客户端将 Ctrl+K 绑定到 0x03,有的客户端将 Ctrl+C 绑定到 0x03)。为了演示,我们使用 ^K(也代指 ^C 字符)。
使用 ^KN 设置字体颜色,使用 ^KN,M 设置字体颜色与背景色,其中 N M 为如下表格的色值(Value)。例如 ^K0,4 表示白色字体、红色背景。
Value | Name | RGB | HTML |
---|---|---|---|
0 | White | 255,255,255 | #FFFFFF |
1 | Black | 0,0,0 | #000000 |
2 | Navy | 0,0,127 | #00007F |
3 | Green | 0,147,0 | #009300 |
4 | Red | 255,0,0 | #FF0000 |
5 | Maroon | 127,0,0 | #7F0000 |
6 | Purple | 156,0,156 | #9C009C |
7 | Orange | 252,127,0 | #FC7F00 |
8 | Yellow | 255,255,0 | #FFFF00 |
9 | Light Green | 0,252,0 | #00FC00 |
10 | Teal | 147,147 | #009393 |
11 | Cyan | 255,255 | #00FFFF |
12 | Royal blue | 0,0,252 | #0000FC |
13 | Magenta | 255,0,255 | #FF00FF |
14 | Gray | 127,127,127 | #7F7F7F |
15 | Light Gray | 210,210,210 | #D2D2D2 |
补充说明
输入控制字符表示设置开始,再次输入控制字符表示设置停止。比如 ^BHello^B World 将显示加粗的 Hello 与普通的 World 样式。
在颜色设置中,如果未指定,后面的设置将“继承”前面的设置。比如 ^K0,1Hello ^4There! 将显示为「背景黑色、Hello 为白色、There! 为红色」样色。
^K 只能清除字体颜色,如果需要清除样色,需要使用 ^O 序列。
在编程语言中,使用转义序列
在 Groovy 或 Java 中,我们应该关注 Code Point 字段。比如,我们想要控制颜色,需要发送 0x03 ETX 字符,应该使用 String color = "\u00030,4Hello World" 来定义白色字体、红色背景的 Hello World 消息。
参考文献