3 回答
TA贡献2003条经验 获得超2个赞
基本
我编写了一个C ++类,可用于设置输出的前景色和背景色。此示例程序用作打印This ->word<- is red.和格式化它的示例,以使前景色word为红色。
#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枚举的另一个条目。这是一个很好的参考。
TA贡献1810条经验 获得超4个赞
在您输出任何颜色之前,您需要确保您在终端:
[ -t 1 ] && echo 'Yes I am in a terminal' # isatty(3) call in C
然后,如果支持颜色,则需要检查终端功能
在具有terminfo
(基于Linux)的系统上,您可以获得支持的颜色数量
Number_Of_colors_Supported=$(tput colors)
在具有termcap
(基于BSD)的系统上,您可以获得支持的颜色数量
Number_Of_colors_Supported=$(tput Co)
然后让你决定:
[ ${Number_Of_colors_Supported} -ge 8 ] && { echo 'You are fine and can print colors'} || { echo 'Terminal does not support color'}
顺便说一下,不要像以前用ESC字符那样使用着色。使用标准调用终端功能,为您分配特定终端支持的CORRECT颜色。
基于BSD
fg_black="$(tput AF 0)"fg_red="$(tput AF 1)"fg_green="$(tput AF 2)"fg_yellow="$(tput AF 3)"fg_blue="$(tput AF 4)"fg_magenta="$(tput AF 5)"fg_cyan="$(tput AF 6)"fg_white="$(tput AF 7)"reset="$(tput me)"
基于Linux
fg_black="$(tput setaf 0)"fg_red="$(tput setaf 1)"fg_green="$(tput setaf 2)"fg_yellow="$(tput setaf 3)"fg_blue="$(tput setaf 4)"fg_magenta="$(tput setaf 5)"fg_cyan="$(tput setaf 6)"fg_white="$(tput setaf 7)"reset="$(tput sgr0)"
用于
echo -e "${fg_red} Red ${fg_green} Bull ${reset}"
- 3 回答
- 0 关注
- 620 浏览
添加回答
举报