您的位置:首页 > 运维架构 > Linux

Linux Console Color (the "\033[" way)

2012-12-29 14:23 260 查看
This is a list of codes used in C++ to change the text color:

black - 30

red - 31

green - 32

brown - 33

blue - 34

magenta - 35

cyan - 36

lightgray - 37

Now these are the basic colours.

Usage of "\033[":

This is to handle the console cursor. I do not have a complete
reference so I ask people who know about it to comment with what I do
not have.

* 'm' character at the end of each of the following sentences is used
as a stop character, where the system should stop and parse the \033[
sintax.

\033[0m - is the default color for the console

\033[0;#m - is the color of the text, where # is one of the codes mentioned above

\033[1m - makes text bold

\033[1;#m - makes colored text bold**

\033[2;#m - colors text according to # but a bit darker

\033[4;#m - colors text in # and underlines

\033[7;#m - colors the background according to #

\033[9;#m - colors text and strikes it

\033[A - moves cursor one line above (carfull: it does not erase the previously written line)

\033[B - moves cursor one line under

\033[C - moves cursor one spacing to the right

\033[D - moves cursor one spacing to the left

\033[E - don't know yet

\033[F - don't know yet

\033[2K - erases everything written on line before this.

**(this could be usefull for those who want more colors. The efect given by bold will give a color change effect)

As a short and simple example that colors text and the bold version:

#include <stdio.h>

int main(int argc, char ** argv)
{
printf("\033[0mHello world!........................................[");
printf("\033[1;32mOK");
printf("\033[0m]\n");

return 0;
}


#include   <stdio.h>
#include   <stdlib.h>
#include   <string.h>

/****************************************************************************
the text color:
black - 30
red - 31
green - 32
brown - 33
blue - 34
magenta - 35
cyan - 36
lightgray - 37
****************************************************************************/

#define COLOR_DEFAULT   "m"
#define COLOR_BLACK     ";30m"
#define COLOR_RED       ";31m"
#define COLOR_GREEN     ";32m"
#define COLOR_BROWN     ";33m"
#define COLOR_BLUE      ";34m"
#define COLOR_MAGANTA   ";35m"
#define COLOR_CYAN      ";36m"
#define COLOR_LIGHTGRAY ";37m"

/****************************************************************************
Usage of "\033[":

This is to handle the console cursor.

I do not have a complete reference so I ask people who know about it to
comment with what I do not have.

* 'm' character at the end of each of the following sentences is used as a
stop character, where the system should stop and parse the \033[ sintax.

\033[0m - is the default color for the console
\033[0;#m - is the color of the text, where # is one of the codes mentioned
above
\033[1m - makes text bold
\033[1;#m - makes colored text bold**
\033[2;#m - colors text according to # but a bit darker
\033[4;#m - colors text in # and underlines
\033[7;#m - colors the background according to #
\033[9;#m - colors text and strikes it
\033[A - moves cursor one line above (carfull: it does not erase the
previously written line)
\033[B - moves cursor one line under
\033[C - moves cursor one spacing to the right
\033[D - moves cursor one spacing to the left
\033[E - don't know yet
\033[F - don't know yet
\033[2K - erases everything written on line before this.
****************************************************************************/

#define MODE_0 "0"
#define MODE_1 "1"
#define MODE_2 "2"
#define MODE_3 "3"
#define MODE_4 "4"
#define MODE_5 "5"
#define MODE_6 "6"
#define MODE_7 "7"
#define MODE_8 "8"
#define MODE_9 "9"
#define MODE_A "A"
#define MODE_B "B"
#define MODE_C "C"
#define MODE_D "D"
#define MODE_E "E"
#define MODE_F "F"
#define MODE_2K "2K"

#define MAX_LINE_LEN 70

#define MAX_DESC_LEN 20

typedef struct strProcessStepsInfo
{
char szStepDesc[MAX_DESC_LEN];
int  nResult;
}ProcessStepsInfo;

void SetModeDefault()
{
printf("\033[0m");
}

void SetMode(const char *pszMode, const char *pszColor)
{
printf("\033[%s%s", pszMode, pszColor);
}

void ShowSpecial(const char *pszOut, const char *pszMode, const char *pszColor)
{
SetMode(pszMode, pszColor);
printf("%s", pszOut);
}

void ShowProcess(const char *pszOut, int nResult)
{
// show steps information
printf("\n");
int  nLen = strlen(pszOut);

int nProcess = 0;

for (nProcess = 0; nProcess <= 100; nProcess++)
{
SetMode(MODE_A, "");

if (nProcess>=100)
{
ShowSpecial(pszOut, MODE_0, COLOR_DEFAULT);
}
else
{
ShowSpecial(pszOut, MODE_1, COLOR_DEFAULT);
}

int nDotCount = 0;
for (nDotCount = 0; nDotCount< MAX_LINE_LEN - nLen; nDotCount++)
{
int nTotal = MAX_LINE_LEN - nLen;
int nShowDotCount = nProcess * nTotal / 100;

if (nDotCount < nShowDotCount)
{
printf(".");
}
else
{
printf(" ");
}
}

if (nProcess>=100)
{
if (nResult)
{
printf(" [");
ShowSpecial("Failed", MODE_1, COLOR_RED);
SetModeDefault();
printf("]\n");
}
else
{
printf(" [");
ShowSpecial("OK", MODE_1, COLOR_GREEN);
SetModeDefault();
printf("]\n");
}
}
else
{
printf(" [%d]\n", nProcess);
}

system("sleep 0.001");
}
}

void ShowAllProcess()
{
// generate steps information
int nSteps = 0;
const int nMaxSteps = 10;
ProcessStepsInfo StepsInfo[nMaxSteps];

for (nSteps = 1; nSteps <= nMaxSteps; nSteps++)
{
sprintf(StepsInfo[nSteps-1].szStepDesc, "Step %d ", nSteps);
StepsInfo[nSteps-1].nResult = rand() % 2;

ShowProcess(StepsInfo[nSteps-1].szStepDesc, StepsInfo[nSteps-1].nResult);
}
}

int main(int argc, char **argv)
{
ShowAllProcess();

SetModeDefault();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: