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

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

这是其输出的示例:

Screenshot showing color value samples

笔记: 查尔斯 似乎更多地了解了它的实际工作原理以及您需要执行哪些操作来验证 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格式字符串不是太硬。

这可以帮助你:

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

您只能真正得到每种颜色的2种不同的色调。试1用2代替以获得暗绿色。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top