如何将彩色字符打印到支持彩色字符的Linux终端?
如何判断终端是否支持颜色码?
如何将彩色字符打印到支持彩色字符的Linux终端?
如何判断终端是否支持颜色码?
当前回答
最好的方法是使用ncurses库——尽管如果你只是想输出一个简单的彩色字符串,这可能是一个大锤来敲坚果
其他回答
您需要输出ANSI颜色代码。注意,并非所有终端都支持此功能;如果不支持颜色序列,就会显示垃圾。
例子:
cout << "\033[1;31mbold red text\033[0m\n";
这里,\033是ESC字符,ASCII 27。它后面跟着[,然后是0个或多个用;隔开的数字,最后是字母m。这些数字描述了从这一点开始切换的颜色和格式。
前景色和背景色的代码如下:
foreground background
black 30 40
red 31 41
green 32 42
yellow 33 43
blue 34 44
magenta 35 45
cyan 36 46
white 37 47
此外,你可以使用这些:
reset 0 (everything back to normal)
bold/bright 1 (often a brighter shade of the same colour)
underline 4
inverse 7 (swap foreground and background colours)
bold/bright off 21
underline off 24
inverse off 27
有关其他不太受广泛支持的代码,请参见维基百科上的表格。
要确定您的终端是否支持颜色序列,请读取TERM环境变量的值。它应该指定所使用的特定终端类型(例如vt100、gnome-terminal、xterm、screen……)。然后在terminfo数据库中查找;检查颜色能力。
试试我的标题这里一个快速和简单的方法来着色文本:Aedi的颜色标题
Escape-Sequence-Color-Header
在Unix中使用c++为输出着色!!
文本属性选项:
ATTRIBUTES_OFF, BOLD, UNDERSCORE, BLINK, REVERSE_VIDEO, CONCEALED
颜色选择:
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE
格式:
通用格式,在$变量$中包含你想要的值
COLOR_$Foreground_Color$_$Background_Color$
COLOR_$Text_Attribute$_$Foreground_Color$_$Background_Color$
COLOR_NORMAL // To set color to default
e.g.
COLOR_BLUE_BLACK // Leave Text Attribute Blank if no Text Attribute appied
COLOR_UNDERSCORE_YELLOW_RED
COLOR_NORMAL
用法:
只是使用流的颜色,你想在输出文本和 在输出文本后再次使用以将颜色设置为正常。
cout << COLOR_BLUE_BLACK << "TEXT" << COLOR_NORMAL << endl;
cout << COLOR_BOLD_YELLOW_CYAN << "TEXT" << COLOR_NORMAL << endl;
你可以使用转义序列,如果你的终端支持的话。例如:
echo \[\033[32m\]Hello, \[\033[36m\]colourful \[\033[33mworld!\033[0m\]
你可以使用ANSI颜色代码。
使用这些函数。
enum c_color{BLACK=30,RED=31,GREEN=32,YELLOW=33,BLUE=34,MAGENTA=35,CYAN=36,WHITE=37};
enum c_decoration{NORMAL=0,BOLD=1,FAINT=2,ITALIC=3,UNDERLINE=4,RIVERCED=26,FRAMED=51};
void pr(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){
cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m";
}
void prl(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){
cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m"<<endl;
}
基础知识
我写了一个c++类,可以用来设置输出的前景色和背景色。这个示例程序用作打印This ->单词<-是红色的示例。格式化它,使单词的前景色为红色。
#include "colormod.h" // namespace Color
#include <iostream>
using namespace std;
int main() {
Color::Modifier red(Color::FG_RED);
Color::Modifier def(Color::FG_DEFAULT);
cout << "This ->" << red << "word" << def << "<- is red." << endl;
}
源
#include <ostream>
namespace Color {
enum Code {
FG_RED = 31,
FG_GREEN = 32,
FG_BLUE = 34,
FG_DEFAULT = 39,
BG_RED = 41,
BG_GREEN = 42,
BG_BLUE = 44,
BG_DEFAULT = 49
};
class Modifier {
Code code;
public:
Modifier(Code pCode) : code(pCode) {}
friend std::ostream&
operator<<(std::ostream& os, const Modifier& mod) {
return os << "\033[" << mod.code << "m";
}
};
}
先进的
您可能希望向该类添加其他特性。它是,例如,可以添加颜色洋红色,甚至样式像粗体。要做到这一点,只需在Code枚举中添加另一个条目。这是一个很好的参考。