我正在尝试使用 ANSI 转义码将彩色字符串打印到 gnome 终端,但是,虽然它适用于自定义颜色,甚至是 256 种额外的颜色,但它不适用于 RGB 代码。
因此,简化一下:
cout << "\033[33m" << '.' << "\033[0m"; # prints with color
cout << "\033[38;5;135m" << '.' << "\033[0m"; # prints with color
cout << "\033[38;2;0;135;0m" << '.' << "\033[0m"; # doesn't work, prints with default color
如何在 gnome-terminal 中输出带有 RGB 颜色代码的内容?
我正在关注此链接以获取输出:维基百科 ANSI 转义代码。
我补充道:
$ export TERM=xterm-256color
使我的 .bashrc 文件支持 256 种颜色并且:
$ tput colors
如果这很重要,则输出 256。
答案1
由于以下原因,RGB 颜色无法在终端中使用:
- Bash 不选择命令行颜色。
- Bash 只能指定 ANSI 颜色。
上述两个原因密切相关。其中大部分取决于您的屏幕和 ANSI 颜色规范。如果您使用好的终端仿真器,您可能能够为某些 ANSI 颜色代码设置自定义 RGB 颜色。
Bash 作为 shell 对于屏幕如何处理显示内容无能为力。它只能将终端上的文字传递到屏幕上。屏幕可以决定如何处理它。屏幕可以决定 ANSI 转义码代表什么颜色(如果终端允许颜色的话)。
一种解决方法是更改终端颜色规格。但是,很少有(我不知道)允许您更改颜色。
答案2
您需要 vte >= 0.36 才能在 gnome-terminal 中显示真彩色。请确保您的 vte 足够新,这样您的代码就可以正常工作。
(注意:当您输出硬编码字符串时,就像在示例应用程序中所做的那样,$TERM 的值必然是绝对不相关的。只有当您使用行为依赖于此的库(例如 ncurses)时,它才重要。)