C ++を使用して、ubuntuで端末のフォントの色を変更するための小さなツールを作成します

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下線-bg青-fg黄色

スタイル、背景色、前景色を同時に設定できます。

cout << "\033[1;31;45mHello, ubuntu!\n";
//中间用;进行分隔

質問があります:それがrootユーザーの下で使用されない場合、効果はありません、専門家の指導をお願いします、ありがとう!

おすすめ

転載: blog.csdn.net/hn_tzy/article/details/103514823
おすすめ