为了在控制台打印彩色内容而设计的头文件
早就想封了,今天实现一下
普通输出
这是第一版写的,因为觉得不好就弃用,但是并没有删,在某些场合可能会用的方便点
这一版定义了一个 color_print()
其定义为
#define color_print(x) printf("%s",((string)""+(x)+color.NONE).c_str())
可以看出来,你在 color_print()
函数中填入的应该是正常的字符串
当然你也可以像普通 printf
一样使用 color_print("12345")
来输出普通字符串,然而这并没有什么意义
因此,你可以在你要输出的字符串前面加上限定参数,譬如
color_print(color.RED+"12345");
这样控制台就会打印一个红色的字符串
所有诸如此类的字符串都在 color 结构体内,具体来说包含以下几个
const string NONE
const string BLACK
const string L_BLACK
const string RED
const string L_RED
const string GREEN
const string L_GREEN
const string BROWN
const string YELLOW
const string BLUE
const string L_BLUE
const string PURPLE
const string L_PURPLE
const string CYAN
const string L_CYAN
const string GRAY
const string WHITE
const string BOLD //粗体
const string UNDERLINE //下划线
const string BLINK //闪烁
const string REVERSE //颜色反转
const string HIDE //隐藏
const string CLEAR //清屏
其中颜色标识的都是修改前景颜色的参数,带 L_颜色
的是高亮显示的颜色参数
这一版的特点
- 可以拼接,比如
color_print(color.RED+"123"+color.GREEN+"45")
这样的用法 - 只有一个限定参数,如果你使用
color_print(color.RED+color.UNDERLINE+"123")
,程序会选择使用最后传入的限定参数,因此不会显示红色
printc
这一版个人觉得比较满意
程序定义了 printc(x,info)
,表示在 x
做限定参数的情况下输出 info
,也就是说,x
是限定参数,info
是输出内容
#define printc(x,info) printf("%s",(__color_info.START()+(x)()+"m"+info+__color_info.NONE()).c_str())
关于限定参数的选取,你可以直接调用已经存在的 __color_info
中的内容,或者你嫌这个名字太长,也可以自行定义一个参数库
__color_t a;
然后你只需要从 a
中调用参数即可
可供选用的参数如下
const __const_color_t START;
const __const_color_t NONE;
const color_t HIGHLIGHT; //高亮
const color_t VAGUE; //模糊,在 bash 下测试时,bash 对这个参数的行为是变暗
const color_t ITALIC; //斜体
const color_t UNDERLINE; //下划线
const color_t TWINKLE; //高闪,bash 不处理这个参数
const color_t FAST_TWINKLE; //快速闪烁,base 不处理这个参数
const color_t REVERSE_COLOR; //颜色反转
const color_t HIDE; //隐藏
struct{
const color_t BLACK;
const color_t RED;
const color_t GREEN;
const color_t YELLOW;
const color_t BLUE;
const color_t PERPLE;
const color_t CRAY;
const color_t WHITE;
}FRONTCOLOR;
struct{
const color_t BLACK;
const color_t RED;
const color_t GREEN;
const color_t YELLOW;
const color_t BLUE;
const color_t PERPLE;
const color_t CRAY;
const color_t WHITE;
}BACKGROUND;
color_t
已经重载了加号,在你需要使用多个限定参数的时候,只需要使用加号将其拼接在一起即可
__color_t a;
printc(a.UNDERLINE+a.ITALIC+a.BACKGROUND.RED,"12345");
请注意参数可能会有冲突,比如选了两个背景颜色做限定参数,此时行为依控制台而定
源码
#ifndef COLORLINUX_H
#define COLORLINUX_H
#include<bits/stdc++.h>
using namespace std;
class color{
public:
const string NONE= "\e[0m";
const string BLACK= "\e[0;30m";
const string L_BLACK= "\e[1;30m";
const string RED= "\e[0;31m";
const string L_RED= "\e[1;31m";
const string GREEN= "\e[0;32m";
const string L_GREEN= "\e[1;32m";
const string BROWN= "\e[0;33m";
const string YELLOW= "\e[1;33m";
const string BLUE= "\e[0;34m";
const string L_BLUE= "\e[1;34m";
const string PURPLE= "\e[0;35m";
const string L_PURPLE= "\e[1;35m";
const string CYAN= "\e[0;36m";
const string L_CYAN= "\e[1;36m";
const string GRAY= "\e[0;37m";
const string WHITE= "\e[1;37m";
const string BOLD= "\e[1m";
const string UNDERLINE= "\e[4m";
const string BLINK= "\e[5m";
const string REVERSE= "\e[7m";
const string HIDE= "\e[8m";
const string CLEAR= "\e[2J";
}color;
class color_t{
private:string x;
public:
color_t operator =(const std::string y){x=y;return *this;};
color_t(const std::string y){x=y;}
color_t operator +(const color_t&A)const{
color_t ans=*this;ans.x=ans.x+";"+A.x;
return ans;
}
const std::string operator()()const{return x;}
};
class __const_color_t{
private:string x;
public:
__const_color_t operator =(const string y){x=y;return *this;};
__const_color_t(const string y){x=y;}
const string operator()()const{return x;}
};
class __color{
public:
const __const_color_t START=(string)"\e[";
const __const_color_t NONE=(string)"\e[0m";
const color_t HIGHLIGHT=(string)"1";
const color_t VAGUE=(string)"2";
const color_t ITALIC=(string)"3";
const color_t UNDERLINE=(string)"4";
const color_t TWINKLE=(string)"5";
const color_t FAST_TWINKLE=(string)"6";
const color_t REVERSE_COLOR=(string)"7";
const color_t HIDE=(string)"8";
struct{
const color_t BLACK=(string)"30";
const color_t RED=(string)"31";
const color_t GREEN=(string)"32";
const color_t YELLOW=(string)"33";
const color_t BLUE=(string)"34";
const color_t PERPLE=(string)"35";
const color_t CRAY=(string)"36";
const color_t WHITE=(string)"37";
}FRONTCOLOR;
struct{
const color_t BLACK=(string)"40";
const color_t RED=(string)"41";
const color_t GREEN=(string)"42";
const color_t YELLOW=(string)"43";
const color_t BLUE=(string)"44";
const color_t PERPLE=(string)"45";
const color_t CRAY=(string)"46";
const color_t WHITE=(string)"47";
}BACKGROUND;
};
typedef __color __color_t;
__color_t __color_info;
#define color_print(x) printf("%s",((string)""+(x)+color.NONE).c_str())
#define printc(x,info) printf("%s",(__color_info.START()+(x)()+"m"+info+__color_info.NONE()).c_str())
#endif
标签:__,info,const,1.13,Fileheader,color,ColorLinux,RED,string
From: https://www.cnblogs.com/HaneDaCafe/p/18467949