Shell颜色封装(C++)

#include <string>
#include <stdarg.h>
#include <sstream>
#include <iostream>
 
typedef enum ShellColor
{
    //使用时先输出 "\033[" ,然后输出下面的枚举值,多个枚举值用分号隔开,最后输 出"m" 即可 
    SC_DEFAULT = 0,             //重新设置属性到缺省设置
    FONT_B = 1,                 //粗体
    FONT_HALF_LIGHT = 2,            //一半亮度
    FONT_U = 4,                 //下划线
    FONT_FLICKER = 5,               //闪烁
    SC_REVERSE = 7,             //将背景与字体颜色相换
    FONT_BLACK = 30,            //黑色字体
    FONT_RED = 31,          //红色字体
    FONT_GREEN = 32,            //绿色字体
    FONT_BROWN = 33,            //棕色字体
    FONT_BLUE = 34,         //蓝色字体
    FONT_PURPLE = 35,       //紫色字体
    FONT_BLUEST = 36,       //青色字体
    FONT_WHITE = 37,            //白色字体
    BG_BLACK = 40,          //黑色背景
    BG_RED = 41,                //红色背景
    BG_GREEN = 42,          //绿色背景
    BG_BROWN = 44,          //棕色背景
    BG_BLUE = 44,           //蓝色背景
    BG_PURPLE = 45,         //紫色背景
    BG_BLUEST = 46,         //青色背景
    BG_WHITE = 47,          //白色背景
} SHELL_COLOR;
 
//下面的方法使用可变参数
std::string set_shell_color(int first,...)  
{
    va_list  lt; 
    va_start(lt,first);
    const int flag = static_cast<int>(-1);
    std::string ret;
    std::stringstream ss; 
    ss<<"\033["<<first;
    int i;
    while((i = va_arg(lt,int)) != flag)
    {   
        ss<<";"<<i;
    }   
    va_end(lt);
    ss<<"m";
    ss>>ret;
    return ret;
}
 
//下面的方法使用 c++0X 特性。
std::string set_shell_color_new(std::initializer_list<int> list)
{
    std::string ret;
    std::stringstream ss; 
    ss<<"\033[";
    for(int i : list)
    {
        ss<<";"<<i;
    }
    ss<<"m";
    ss>>ret;
    return ret;
}
 
///*
int main()
{
    std::cout<<set_shell_color(FONT_BLUEST,FONT_U,-1)<<"set_shell_color"<<std::endl;
    std::cout<<set_shell_color_new({FONT_PURPLE,FONT_B})<<"set_shell_color_new"<<set_shell_color_new({0})<<std::endl;
}
//*/

 

posted @ 2013-06-06 10:50  轻典  阅读(464)  评论(0编辑  收藏  举报