如何向终端输出不同的绿色阴影?

时间:2010-05-11 21:10:20

标签: c bash color-codes

我目前正在使用以下代码将绿色文本输出到终端:

printf("%c[1;32mHello, world!\n", 27);

然而,我想要更多的绿色色调。最简单的方法是什么?

3 个答案:

答案 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";
}

以下是其输出样本:

Screenshot showing color value samples

注意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)

这可能会对您有所帮助:

http://en.wikipedia.org/wiki/ANSI_escape_code

每种颜色只能有两种不同的色调。尝试用2替换1以获得深绿色。