我目前正在使用以下代码将绿色文本输出到终端:
printf("%c[1;32mHello, world!\n", 27);
然而,我想要更多的绿色色调。最简单的方法是什么?
答案 0 :(得分:3)
您可以使用256colors2.pl网站上的Rob Meerman's脚本确保终端正确处理256种颜色。然后选择正确的RGB值组合,为您提供正确的绿色阴影。
根据他的剧本,看起来颜色数字基本上是基础6配色方案的偏移量:
COLOR = r*6^2 + g*6 + b) + 16
对于我们需要使用的前景色:
\x1b[38;5;${COLORNUM}m
再次基于他的脚本,这是一个(perl)循环,以所需的颜色显示字母O:
# 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";
}
以下是其输出样本:
注意:Charles似乎更多关于它实际如何工作以及您需要做些什么来验证shell是否支持所需的功能。我的信息严格基于观察和测试,其外壳已知支持256色(konsole)。
答案 1 :(得分:2)
如何执行此操作取决于您的终端。您可能应该能够查询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,
%
参数格式化有点(可以非常)解析,但在infocmp
手册页中有记录。将其翻译为printf
格式字符串并不太难。
答案 2 :(得分:0)