Ubuntu下控制码:
常用的ANSI控制码如下(有些不支持):
\033[0m 关闭所有属性
\033[1m 高亮
\033[2m 亮度减半
\033[3m 斜体
\033[4m 下划线
\033[5m 闪烁
\033[6m 快闪
\033[7m 反显
\033[8m 消隐
\033[9m 中间一道横线
10-19 关于字体的
21-29 基本与1-9正好相反
30-37 设置前景色
40-47 设置背景色
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
38 打开下划线,设置默认前景色
39 关闭下划线,设置默认前景色
40 黑色背景
41 红色背景
42 绿色背景
43 棕色背景
44 蓝色背景
45 品红背景
46 孔雀蓝背景
47 白色背景
48 不知道什么东西
49 设置默认背景色
50-89 没用
90-109 又是设置前景背景的,比之前的颜色浅
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
源代码
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
const int CMD_SETTYPE = 0;
const int CMD_SETBGCOLOR = 1;
const int CMD_SETFGCOLOR = 2;
const int CMD_HELP = 3;
const size_t STYLE_LENGTH = 10;
const string STYLE[] = {"DEFAULT", "INTENSITY", "HALF_INTENSITY", "ITALIC", "UNDERLINE", "FLASH",
"FAST_FLASH", "INVERT_SHOW", "HIDE", "DELETELINE"};
const size_t BGCOLOR_LENGTH = 8;
const string BGCOLOR[] = {"BLACK", "RED", "GREEN", "YELLOW", "BLUE", "PURPLE", "PEACOCK_BLUE", "WHITE"};
const size_t FGCOLOR_LENGTH = 8;
const string FGCOLOR[] = {"BLACK", "RED", "GREEN", "YELLOW", "BLUE", "PURPLE", "PEACOCK_BLUE", "WHITE"};
using namespace std;
void toUpCase(string &);
void help()
{
cout << "\n******设置终端颜色的工具******\n";
cout << "参数列表:\n";
cout << "-s: \n 后面接样式类型:default--默认样式,intensity--高亮加粗,half_intensity--高亮减半,italic--斜体,"
<< "underline--下划线,flash--闪烁,fast_flash--快速闪烁,invert_show--反显,hide--隐藏,deleteline--删除线。\n\n";
cout << "-bg:\n 设置背景颜色,后面接颜色:black--黑,red--红,green--绿,yellow--黄,blue--蓝,purple--紫,"
<< "peacock_blue--孔雀蓝,white--白。\n\n";
cout << "-fg:\n 设置字的颜色,后面接颜色:black--黑,red--红,green--绿,yellow--黄,blue--蓝,purple--紫,"
<< "peacock_blue--孔雀蓝,white--白。\n\n";
cout << "-h: \n 显示帮助。\n";
cout << "\n*******************************\n";
}
string setBgColor(const string &color)
{
string sColor(color);
string result;
string &s = sColor;
toUpCase(sColor);
size_t i = 0;
while (i < BGCOLOR_LENGTH)
{
if (sColor.compare(BGCOLOR[i]) == 0)
{
break;
}
++i;
}
ostringstream osm;
if (i >= BGCOLOR_LENGTH)
return result;
else
i += 40;
osm << i;
result += "\033[" + osm.str() + "m";
return result;
}
string setFgColor(const string &color)
{
string sColor(color);
string result;
toUpCase(sColor);
size_t i = 0;
while (i < FGCOLOR_LENGTH)
{
if (sColor.compare(FGCOLOR[i]) == 0)
{
break;
}
++i;
}
ostringstream osm;
if (i >= FGCOLOR_LENGTH)
return result;
else
i += 30;
osm << i;
result += "\033[" + osm.str() + "m";
return result;
}
string setStyle(const string &style)
{
string sStyle = style;
string result;
toUpCase(sStyle);
size_t i = 0;
while (i < STYLE_LENGTH)
{
if (sStyle.compare(STYLE[i]) == 0)
{
break;
}
++i;
}
ostringstream osm;
if (i >= STYLE_LENGTH)
return result;
osm << i;
result += "\033[" + osm.str() + "m";
return result;
}
int getParamType(const string &cmd)
{
if (cmd.compare("-s") == 0)
{
return CMD_SETTYPE;
}
else if (cmd.compare("-bg") == 0)
{
return CMD_SETBGCOLOR;
}
else if (cmd.compare("-fg") == 0)
{
return CMD_SETFGCOLOR;
}
else if (cmd.compare("-h") == 0)
{
return CMD_HELP;
}
else
{
return -1;
}
}
typedef string (*strFP)(const string &);
strFP getFuncByCmdType(int cmdType)
{
switch (cmdType)
{
case CMD_SETTYPE:
return setStyle;
case CMD_SETBGCOLOR:
return setBgColor;
case CMD_SETFGCOLOR:
return setFgColor;
default:
return nullptr;
}
}
string format(int count, char *argv[])
{
string result;
if (count <= 1)
return result;
if (getParamType(argv[1]) == CMD_HELP){
help();
return result;
}
int i = 1;
int cmdIndex = -1;
while (i < count)
{
if(i+1 >= count)
return result;
cmdIndex = getParamType(argv[i]);
strFP func = getFuncByCmdType(cmdIndex);
if (func != nullptr)
{
result += func(argv[i + 1]);
}
else
{
result = "";
return result;
}
i += 2;
}
return result;
}
void toUpCase(string &s)
{
size_t len = s.length();
size_t interval = 'a' - 'A';
for (size_t i = 0; i < len; i++)
{
s[i] = (s[i] >= 97 && s[i] <= 122) ? s[i] - interval : s[i];
}
}
int main(int argc, char *argv[])
{
if (argc <= 1)
{
help();
return 0;
}
string formatStr = format(argc, argv);
cout << formatStr;
return 0;
}
将代码保存为chcolor.cpp文件。
编译
g++ -std=c++11 -o chcolor chcolor.cpp
复制chcolor到/bin/目录下:sudo cp chcolor /bin/
使用
切换到root:sudo su
在终端下输入:chcolor -h
输入:chcolor -s underline -bg blue -fg yellow
可以同时设置样式,背景色,前景色:
cout << "\033[1;31;45mHello, ubuntu!\n";
//中间用;进行分隔
有个问题:如果不在root用户下使用则没有效果,请高手指点,谢谢!