题
我目前正在使用以下代码将绿色文本输出到终端:
printf("%c[1;32mHello, world!\n", 27);
然而,我想要更多的绿色色调。实现这一目标的最简单方法是什么?
解决方案
您可以使用 256colors2.pl 脚本上 罗布·米尔曼的 站点以确保您的终端正确处理 256 色。然后选择正确的 RGB 值组合以获得正确的绿色阴影。
根据他的脚本,看起来颜色数字本质上是 6 基色方案的偏移量:
COLOR = r*6^2 + g*6 + b) + 16
对于前景色,我们需要使用:
\x1b[38;5;${COLORNUM}m
再次基于他的脚本,这是一个以所需颜色显示字母 O 的 (perl) 循环:
# now the color values
for ($green = 0; $green < 6; $green++) {
for ($red = 0; $red < 6; $red++) {
for ($blue = 0; $blue < 6; $blue++) {
$color = 16 + ($red * 36) + ($green * 6) + $blue;
print "\\x1b[38;5;${color}m :\x1b[38;5;${color}m O\x1b[0m ";
print "\n" if ($blue == 2 || $blue == 5);
}
}
print "\n";
}
这是其输出的示例:
笔记: 查尔斯 似乎更多地了解了它的实际工作原理以及您需要执行哪些操作来验证 shell 是否支持所需的功能。我的信息严格基于对已知支持 256 色的 shell (konsole) 的观察和测试。
其他提示
您如何做到这一点取决于你的终端上。你可能应该能够查询termcap或terminfo数据库,以了解如何。
这是最简单的一些tput
命令来证明。
E.g。我的当前终端对:
tput initc 2 500 900 100
tput setaf 2
定义色彩2是绿色的一种(该参数是0至1000之间的RGB值)和前景切换到这种颜色。
要看到在C
程序为您的给定的终端可显示与infocmp
能力所需的字符序列。
E.g。 (为我的终端)
$ infocmp -1 | grep initc
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
$ infocmp -1 | grep setaf
setaf=\E[38;5;%p1%dm,
放慢参数格式化%
是有点(OK非常)痛苦的解析,但在infocmp
手册页中记录。平移这printf
格式字符串不是太硬。
不隶属于 StackOverflow