BASH下运行程序的颜色输出
Colour output of program run under BASH
我需要能够使终端上的一些文本更加引人注目,我想的是使文本着色。要么是实际的文本,要么是每个字母的矩形中的空格(想想vi的光标)。我认为对我的应用程序来说唯一重要的两个额外规范是:程序应该是独立于发行版的(可以肯定的是,代码只能在BASH下运行),并且在写入文件时不应该输出额外的字符(无论是从实际代码还是管道输出)
我在网上搜索了一些信息,但我只能找到不推荐使用的cstdlib(stdlib.h)的信息,我需要(实际上,这更像是一种"想要")使用iostream的功能。
大多数终端都尊重ASCII颜色序列。它们的工作方式是先输出ESC
,然后输出[
,再输出以分号分隔的颜色值列表,然后再输出m
。这些是常见值:
Special
0 Reset all attributes
1 Bright
2 Dim
4 Underscore
5 Blink
7 Reverse
8 Hidden
Foreground colors
30 Black
31 Red
32 Green
33 Yellow
34 Blue
35 Magenta
36 Cyan
37 White
Background colors
40 Black
41 Red
42 Green
43 Yellow
44 Blue
45 Magenta
46 Cyan
47 White
因此,输出" 33[31;47m"
应使终端正面(文本)颜色为红色,背景颜色为白色。
你可以用C++形式很好地包装它:
enum Color {
NONE = 0,
BLACK, RED, GREEN,
YELLOW, BLUE, MAGENTA,
CYAN, WHITE
}
std::string set_color(Color foreground = 0, Color background = 0) {
char num_s[3];
std::string s = " 33[";
if (!foreground && ! background) s += "0"; // reset colors if no params
if (foreground) {
itoa(29 + foreground, num_s, 10);
s += num_s;
if (background) s += ";";
}
if (background) {
itoa(39 + background, num_s, 10);
s += num_s;
}
return s + "m";
}
这是@nightcracker的上面代码的一个版本,使用stringstream
而不是itoa
。(这使用clang++、C++11、OS X 10.7、iTerm2、bash运行)
#include <iostream>
#include <string>
#include <sstream>
enum Color
{
NONE = 0,
BLACK, RED, GREEN,
YELLOW, BLUE, MAGENTA,
CYAN, WHITE
};
static std::string set_color(Color foreground = NONE, Color background = NONE)
{
std::stringstream s;
s << " 33[";
if (!foreground && ! background){
s << "0"; // reset colors if no params
}
if (foreground) {
s << 29 + foreground;
if (background) s << ";";
}
if (background) {
s << 39 + background;
}
s << "m";
return s.str();
}
int main(int agrc, char* argv[])
{
std::cout << "These words should be colored [ " <<
set_color(RED) << "red " <<
set_color(GREEN) << "green " <<
set_color(BLUE) << "blue" <<
set_color() << " ]" <<
std::endl;
return EXIT_SUCCESS;
}
您可能需要查看VT100控制代码。
您还可以制作自定义函数,如:
void textcolor(int color)
{
std::cout<<" 33]"<<color;
}
欲了解更多信息,请阅读http://en.wikipedia.org/wiki/ANSI_escape_code
您可以从github使用libcolor(https://github.com/Spezialcoder/libcolor)
#include "libcolor/libcolor.h"
#include <iostream>
using namespace std;
int main()
{
cout << font_color::green << "Hello World" << endl;
}
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- C++上输出的字符数组中的不同颜色字符
- 更改输出索引的颜色
- 如何将控制台输出的文本颜色更改为红色,但如果从Powershell或CMD运行,背景将保持相同的颜色
- 无法更改 Visual Studio 2010 中输出的文本颜色和文本背景
- 如何在GDAL输出文件中设置分类颜色
- 更改 C 和 C++ 中控制台输出的背景颜色
- C++函数系统(命令)的输出在Linux终端中不显示颜色
- 将中值剪切颜色缩减算法的输出调色板应用于源图像
- BASH下运行程序的颜色输出
- 为什么 clang 在 Scons 下不显示颜色输出?
- C++输出到Windows终端使用cout<<term_cc<color,default,attrib>在Windows上正确输出颜色和属性,但在Linux上不能
- 更改调试输出的颜色
- 如何添加颜色编码到提升::日志控制台输出
- Boost图形库-顶点颜色和graphviz输出的最小示例
- 如何设置log4cxx的控制台输出颜色