在带有 ncurses (C++) 的同一个字符串流中使用不同的颜色
Using different colors in the same stringstream with ncurses (C++)
我正在编写代码,我正在使用 ncurses 和 stringstreams (C++)。
我想打印(仅)数字为负数为红色,为正数为绿色。
根据程序的结构,我对整个输出使用单个字符串流。所以如果我改变颜色:
start_color();
init_pair(1, COLOR_RED, COLOR_BLACK);
init_pair(2, COLOR_GREEN, COLOR_BLACK);
attron(COLOR_PAIR(1));
它为所有输出着色(我只想为数字着色)。
我也尝试过使用 ANSI 代码,但它不适用于 ncurses。
我的代码是这样的:
stringstream_var.clear();
stringstream_var.str(std::string());
if (num1 < 0){
//I just want to print num1 in red
stringstream_var << "Number 1: " << num1 << std::endl;
}else{
//I just want to print num1 in green
stringstream_var << "Number 1: " << num1 << std::endl;
}
我怎样才能做到这一点?
可能吗?
根据官方文档:
color pair 0 is special; it denotes "no color".
因此您可以创建一个辅助函数,它接受一个 std::string
a 打印关于 COLOR_PAIR
值的给定颜色的文本。像这样:
#include <curses.h>
void print_with_color(const std::string& text, int color_pair) {
attron(COLOR_PAIR(color_pair));
printw(text.c_str());
}
void print_without_color(const std::string& text) {
attron(COLOR_PAIR(0)); // No color
printw(text.c_str());
}
int main(void) {
initscr();
start_color();
init_pair(1, COLOR_BLACK, COLOR_RED);
init_pair(2, COLOR_BLACK, COLOR_GREEN);
print_without_color("Number 1: ");
int number = std::rand();
if (number) {
print_with_color(std::to_string(number), 1);
} else {
print_with_color(std::to_string(number), 2);
}
refresh();
}
无论如何,如果您要使用 C++ 流,最好寻找现代替代方案。检查 termcolor。你可以这样做:
if (number) {
std::cout << "Number 1: " << termcolor::red << number << std::endl;
} else {
std::cout << "Number 1: " << termcolor::green << number << std::endl;
}
我正在编写代码,我正在使用 ncurses 和 stringstreams (C++)。
我想打印(仅)数字为负数为红色,为正数为绿色。
根据程序的结构,我对整个输出使用单个字符串流。所以如果我改变颜色:
start_color();
init_pair(1, COLOR_RED, COLOR_BLACK);
init_pair(2, COLOR_GREEN, COLOR_BLACK);
attron(COLOR_PAIR(1));
它为所有输出着色(我只想为数字着色)。 我也尝试过使用 ANSI 代码,但它不适用于 ncurses。
我的代码是这样的:
stringstream_var.clear();
stringstream_var.str(std::string());
if (num1 < 0){
//I just want to print num1 in red
stringstream_var << "Number 1: " << num1 << std::endl;
}else{
//I just want to print num1 in green
stringstream_var << "Number 1: " << num1 << std::endl;
}
我怎样才能做到这一点?
可能吗?
根据官方文档:
color pair 0 is special; it denotes "no color".
因此您可以创建一个辅助函数,它接受一个 std::string
a 打印关于 COLOR_PAIR
值的给定颜色的文本。像这样:
#include <curses.h>
void print_with_color(const std::string& text, int color_pair) {
attron(COLOR_PAIR(color_pair));
printw(text.c_str());
}
void print_without_color(const std::string& text) {
attron(COLOR_PAIR(0)); // No color
printw(text.c_str());
}
int main(void) {
initscr();
start_color();
init_pair(1, COLOR_BLACK, COLOR_RED);
init_pair(2, COLOR_BLACK, COLOR_GREEN);
print_without_color("Number 1: ");
int number = std::rand();
if (number) {
print_with_color(std::to_string(number), 1);
} else {
print_with_color(std::to_string(number), 2);
}
refresh();
}
无论如何,如果您要使用 C++ 流,最好寻找现代替代方案。检查 termcolor。你可以这样做:
if (number) {
std::cout << "Number 1: " << termcolor::red << number << std::endl;
} else {
std::cout << "Number 1: " << termcolor::green << number << std::endl;
}