Як вивести кольоровий текст на термінал Linux?


300

Як надрукувати кольорові символи на терміналі Linux, який підтримує його?

Як дізнатися, чи підтримує термінал кольорові коди?


9
Щоб визначити, на що здатний термінал, перевірте базу даних можливостей терміналу. див termcap(5).
jrockway

1
Не соромтеся ознайомитись із фрагментом коду, який я розміщую тут . Це невеличкий інструмент, який забарвлює свій вихід за допомогою якихось макросів.
epatel

7
"База даних termcap - це застарілий інструмент для опису можливостей терміналів і принтерів символьних комірок. Він зберігається лише для можливості роботи зі старими програмами; нові повинні використовувати terminfo(5)базу даних та пов'язані з нею бібліотеки." -termcap(5)
OrangeDog


1
Якщо ви хочете зробити кілька сучасних матеріалів з кольоровим друком, пропоную прочитати цю статтю. Я вважаю це дуже корисним
SubMachine

Відповіді:


408

Вам потрібно вивести кольори ANSI кольорів . Зауважте, що не всі термінали підтримують це; якщо кольорові послідовності не підтримуються, з’явиться сміття.

Приклад:

 cout << "\033[1;31mbold red text\033[0m\n";

Ось \033символ ESC, ASCII 27. За ним слідує [, потім нульове чи більше цифр, розділених ;і, нарешті, буквоюm . Цифри описують колір та формат, на який слід переходити з цього моменту наперед.

Коди кольорів переднього плану та фону:

         foreground background
black        30         40
red          31         41
green        32         42
yellow       33         43
blue         34         44
magenta      35         45
cyan         36         46
white        37         47

Крім того, ви можете використовувати такі:

reset             0  (everything back to normal)
bold/bright       1  (often a brighter shade of the same colour)
underline         4
inverse           7  (swap foreground and background colours)
bold/bright off  21
underline off    24
inverse off      27

Інші, менш широко підтримувані коди див. У таблиці Вікіпедії .


Щоб визначити, чи підтримує ваш термінал кольорові послідовності, прочитайте значення TERMзмінної середовища. Необхідно вказати конкретний тип терміналу (наприклад vt100, gnome-terminal, xterm, screen, ...). Потім подивіться це в базу даних terminfo ; перевірити colorsпрацездатність.


15
Це були коліна бджіл на BBS…
Potatoswatter

11
Що mробити / стояти?
ніппонез

4
@nipponese \033[і mпозначте початок і кінець послідовності евакуації для кольорів ANSI кольорів. Ref: en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes
thameera

20
Я використовую це для визначення "маніпуляторів", таких як const std::string red("\033[0;31m");або const std::string reset("\033[0m");. Тоді я можу писати просто cout << red << "red text" << reset << endl;.
Даніель Лангр

4
Я б розглядав це для наочності кольорів: misc.flogisoft.com/bash/tip_colors_and_formatting
Liran Funaro

97

Основи

Я написав клас C ++, який можна використовувати для встановлення кольору переднього плану та фону фону. Ця зразкова програма слугує прикладом друку This ->word<- is red.та форматування, щоб колір переднього плану wordбув червоним.

#include "colormod.h" // namespace Color
#include <iostream>
using namespace std;
int main() {
    Color::Modifier red(Color::FG_RED);
    Color::Modifier def(Color::FG_DEFAULT);
    cout << "This ->" << red << "word" << def << "<- is red." << endl;
}

Джерело

#include <ostream>
namespace Color {
    enum Code {
        FG_RED      = 31,
        FG_GREEN    = 32,
        FG_BLUE     = 34,
        FG_DEFAULT  = 39,
        BG_RED      = 41,
        BG_GREEN    = 42,
        BG_BLUE     = 44,
        BG_DEFAULT  = 49
    };
    class Modifier {
        Code code;
    public:
        Modifier(Code pCode) : code(pCode) {}
        friend std::ostream&
        operator<<(std::ostream& os, const Modifier& mod) {
            return os << "\033[" << mod.code << "m";
        }
    };
}

Розширений

Ви можете додати додаткові функції до класу. Наприклад, можна додати кольоровий пурпурний колір і навіть стилі, такі як жирний шрифт . Для цього достатньо ще одного запису до Codeперерахунку. Це хороша довідка.


Великий‌‌‌‌‌‌‌‌‌‌‌. Це може бути корисно, якщо ви можете додати інші кольори, а також кольори фону.
нано

7
ще декілька: `FG_DEFAULT = 39, FG_BLACK = 30, FG_RED = 31, FG_GREEN = 32, FG_YELLOW = 33, FG_BLUE = 34, FG_MAGENTA = 35, FG_CYAN = 36, FG_LIGHT_GRAY = 37, FG_DARK_GG = 90, FG_DARK_GG_GG_DARK_GG 92, FG_LIGHT_YELLOW = 93, FG_LIGHT_BLUE = 94, FG_LIGHT_MAGENTA = 95, FG_LIGHT_CYAN = 96, FG_WHITE = 97, BG_RED = 41, BG_GREEN = 42, BG_BLUE = 44, BG_DEFAULT = 49`
Phantrast

6
Якщо ви визначаєте operator<<для Code, то ви можете безпосередньо писати std::cout << Color::FG_RED;замість std::cout << Modifier(Color::FG_RED);. Тобто, Modifierне знадобиться.
Наваз

2
@Nawaz Хороша ідея. Ось така реалізація: pastebin.com/zWC3t9hC . Однак я зберіг би свою первісну реалізацію у відповіді, бо вважаю, що вона більш розширювана.
Joel Sjögren

1
Насправді мені подобається перша реалізація краще, оскільки ви можете додати прапор, щоб увімкнути або вимкнути кольори: додати bool sh;до класу та змінити конструктор на Modifier (Code pCode, bool show = true) : code(pCode), sh(show) {}. Нарешті, в тіло <<оператора поверніть поточну лінію if (sh)і в return << os;іншому випадку. Це дозволяє записати свій код з тим, Color::Modifier red(Color::FG_RED, BoolVar);де ви можете встановити BoolVarяк істинне чи помилкове, як ініціалізацію програми. Ви можете увімкнути його, щоб побачити його на екрані та вимкнути, щоб переспрямувати файл.
rpsml

42

Перш ніж збиратись для виведення будь-якого кольору, переконайтеся, що ви перебуваєте в терміналі:

[ -t 1 ] && echo 'Yes I am in a terminal'  # isatty(3) call in C

Тоді вам потрібно перевірити працездатність терміналу, чи підтримує він колір

в системах з terminfo (на базі Linux) ви можете отримати кількість підтримуваних кольорів як

Number_Of_colors_Supported=$(tput colors)

в системах з termcap (на базі BSD) можна отримати кількість підтримуваних кольорів як

Number_Of_colors_Supported=$(tput Co)

Тоді прийміть рішення:

[ ${Number_Of_colors_Supported} -ge 8 ] && {
    echo 'You are fine and can print colors'
} || {
    echo 'Terminal does not support color'
}

BTW, не використовуйте забарвлення, як це було запропоновано раніше для символів ESC. Використовуйте стандартний дзвінок до можливості терміналу, який призначить ПРАВИЛЬНІ кольори, які підтримують конкретний термінал.

На базі BSD
fg_black="$(tput AF 0)"
fg_red="$(tput AF 1)"
fg_green="$(tput AF 2)"
fg_yellow="$(tput AF 3)"
fg_blue="$(tput AF 4)"
fg_magenta="$(tput AF 5)"
fg_cyan="$(tput AF 6)"
fg_white="$(tput AF 7)"
reset="$(tput me)"
На основі Linux
fg_black="$(tput setaf 0)"
fg_red="$(tput setaf 1)"
fg_green="$(tput setaf 2)"
fg_yellow="$(tput setaf 3)"
fg_blue="$(tput setaf 4)"
fg_magenta="$(tput setaf 5)"
fg_cyan="$(tput setaf 6)"
fg_white="$(tput setaf 7)"
reset="$(tput sgr0)"
Використовувати як
echo -e "${fg_red}  Red  ${fg_green} Bull ${reset}"

3
Хіба цей баш не специфічний? -t 1, очевидно, не працюватиме в C ++, а виклик цієї програми tput зробить це дуже крутим у програмі C ++.
Мача

2
@Macha, так, [ -t 1 ]це sh / bash специфічно, але в правій частині після #(comment)знака є функція C, яка робить те саме. man 3 isattyповинен допомогти у цьому;) Приклад показаний у вигляді команд оболонки для спрощення пояснення основної точки. Щодо про tputце утиліта OPEN source для запиту стандартного інтерфейсу можливостей терміналу.
Олексій

1
Я не впевнений, чому люди постійно пропонують використовувати ці коди безпосередньо. Справді, дуже погана практика робити такі припущення. Навіть якщо це специфічний для оболонки код, його може перекласти кожен, хто має навіть початковий досвід роботи з оболонкою.
osirisgothra

34

Як заявили інші, ви можете використовувати символи втечі. Ви можете використовувати мій заголовок , щоб полегшити:

#ifndef _COLORS_
#define _COLORS_

/* FOREGROUND */
#define RST  "\x1B[0m"
#define KRED  "\x1B[31m"
#define KGRN  "\x1B[32m"
#define KYEL  "\x1B[33m"
#define KBLU  "\x1B[34m"
#define KMAG  "\x1B[35m"
#define KCYN  "\x1B[36m"
#define KWHT  "\x1B[37m"

#define FRED(x) KRED x RST
#define FGRN(x) KGRN x RST
#define FYEL(x) KYEL x RST
#define FBLU(x) KBLU x RST
#define FMAG(x) KMAG x RST
#define FCYN(x) KCYN x RST
#define FWHT(x) KWHT x RST

#define BOLD(x) "\x1B[1m" x RST
#define UNDL(x) "\x1B[4m" x RST

#endif  /* _COLORS_ */

Прикладом використання макросів заголовка може бути:

#include <iostream>
#include "colors.h"
using namespace std;

int main()
{
    cout << FBLU("I'm blue.") << endl;
    cout << BOLD(FBLU("I'm blue-bold.")) << endl;
    return 0;
}

введіть тут опис зображення


Дивовижний заголовок!
Чжен Ку

16

Я використовую таке рішення, воно досить просте та елегантне, його можна легко вставити у джерело та працює на Linux / Bash:

const std::string red("\033[0;31m");
const std::string green("\033[1;32m");
const std::string yellow("\033[1;33m");
const std::string cyan("\033[0;36m");
const std::string magenta("\033[0;35m");
const std::string reset("\033[0m");

std::cout << "Measured runtime: " << yellow << timer.count() << reset << std::endl;

14

З мого розуміння, типовий колірний код ANSI

"\033[{FORMAT_ATTRIBUTE};{FORGROUND_COLOR};{BACKGROUND_COLOR}m{TEXT}\033[{RESET_FORMATE_ATTRIBUTE}m"

складається з (ім'я та кодек)

  • ФОРМАТ АТРИБУТ

    { "Default", "0" },
    { "Bold", "1" },
    { "Dim", "2" },
    { "Underlined", "3" },
    { "Blink", "5" },
    { "Reverse", "7" },
    { "Hidden", "8" }
  • ЗАБЕЗПЕЧНИЙ КОЛІР

    { "Default", "39" },
    { "Black", "30" },
    { "Red", "31" },
    { "Green", "32" },
    { "Yellow", "33" },
    { "Blue", "34" },
    { "Magenta", "35" },
    { "Cyan", "36" },
    { "Light Gray", "37" },
    { "Dark Gray", "90" },
    { "Light Red", "91" },
    { "Light Green", "92" },
    { "Light Yellow", "93" },
    { "Light Blue", "94" },
    { "Light Magenta", "95" },
    { "Light Cyan", "96" },
    { "White", "97" }
  • КОЛІР ФОНУ

    { "Default", "49" },
    { "Black", "40" },
    { "Red", "41" },
    { "Green", "42" },
    { "Yellow", "43" },
    { "Blue", "44" },
    { "Megenta", "45" },
    { "Cyan", "46" },
    { "Light Gray", "47" },
    { "Dark Gray", "100" },
    { "Light Red", "101" },
    { "Light Green", "102" },
    { "Light Yellow", "103" },
    { "Light Blue", "104" },
    { "Light Magenta", "105" },
    { "Light Cyan", "106" },
    { "White", "107" }
  • ТЕКСТ

  • ВІДПОВІДАЙТЕ ФОРМАТУВАННЯ

    { "All", "0" },
    { "Bold", "21" },
    { "Dim", "22" },
    { "Underlined", "24" },
    { "Blink", "25" },
    { "Reverse", "27" },
    { "Hidden", "28" }

За допомогою цієї інформації легко розфарбувати рядок "Я - банан!" з кольором наземного наземного кольору "Жовтий" та кольором тла "Зелений", як це

"\033[0;33;42mI am a Banana!\033[0m"

Або з розфарбуванням бібліотеки C ++

auto const& colorized_text = color::rize( "I am a banana!", "Yellow", "Green" );
std::cout << colorized_text << std::endl;

Більше прикладів з FORMAT ATTRIBUTE тутвведіть тут опис зображення


Це набагато краще, і я можу використовувати його в моєму розширенні PHP C ++.
Aftab Naveed

12

Це стара тема, але я написав клас із вкладеними підкласами та статичними членами для кольорів, визначених простими макросами C.

Я отримав colorфункцію з цієї публікації Кольоровий текст у програмуванні на С у dreamincode.net користувачем no2pencil.

Я зробив це таким чином, щоб мати можливість використовувати статичні константи в потоці std :: cout так:

cout << zkr::cc::fore::red << "This is red text. " 
     << zkr::cc::console << "And changing to console default colors, fg, bg."
     << endl;

Клас та вихідний код тестової програми можна завантажити тут .

cc::consoleповернеться до консолі кольорів та атрибутів за замовчуванням, cc::underlineпідкреслить текст, який працює на шпаклівці, яку я тестував тестову програму.

Кольори:

black
blue
red
magenta
green
cyan
yellow
white

lightblack
lightblue
lightred
lightmagenta
lightgreen
lightcyan
lightyellow
lightwhite

Які можуть бути використані як для, так foreі для backстатичних підкласів ccстатичного класу.

EDIT 2017

Я просто додаю сюди код класу, щоб бути більш практичним.

Макроси кольорового коду:

#define CC_CONSOLE_COLOR_DEFAULT "\033[0m"
#define CC_FORECOLOR(C) "\033[" #C "m"
#define CC_BACKCOLOR(C) "\033[" #C "m"
#define CC_ATTR(A) "\033[" #A "m"

і основна кольорова функція, яка визначає колір або атрибут на екрані:

char *cc::color(int attr, int fg, int bg)
{
    static char command[13];

    /* Command is the control command to the terminal */
    sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40);
    return command;
}

ccolor.h

#include <stdio.h>

#define CC_CONSOLE_COLOR_DEFAULT "\033[0m"
#define CC_FORECOLOR(C) "\033[" #C "m"
#define CC_BACKCOLOR(C) "\033[" #C "m"
#define CC_ATTR(A) "\033[" #A "m"

namespace zkr
{
    class cc
    {
    public:

        class fore
        {
        public:
            static const char *black;
            static const char *blue;
            static const char *red;
            static const char *magenta;
            static const char *green;
            static const char *cyan;
            static const char *yellow;
            static const char *white;
            static const char *console;

            static const char *lightblack;
            static const char *lightblue;
            static const char *lightred;
            static const char *lightmagenta;
            static const char *lightgreen;
            static const char *lightcyan;
            static const char *lightyellow;
            static const char *lightwhite;
        };

        class back
        {
        public:
            static const char *black;
            static const char *blue;
            static const char *red;
            static const char *magenta;
            static const char *green;
            static const char *cyan;
            static const char *yellow;
            static const char *white;
            static const char *console;

            static const char *lightblack;
            static const char *lightblue;
            static const char *lightred;
            static const char *lightmagenta;
            static const char *lightgreen;
            static const char *lightcyan;
            static const char *lightyellow;
            static const char *lightwhite;
        };

        static char *color(int attr, int fg, int bg);
        static const char *console;
        static const char *underline;
        static const char *bold;
    };
}

ccolor.cpp

#include "ccolor.h"

using namespace std;

namespace zkr
{
    enum Color
    {
        Black,
        Red,
        Green,
        Yellow,
        Blue,
        Magenta,
        Cyan,
        White,
        Default = 9
    };

    enum Attributes
    {
        Reset,
        Bright,
        Dim,
        Underline,
        Blink,
        Reverse,
        Hidden
    };

    char *cc::color(int attr, int fg, int bg)
    {
        static char command[13];
        /* Command is the control command to the terminal */
        sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40);
        return command;
    }

    const char *cc::console = CC_CONSOLE_COLOR_DEFAULT;
    const char *cc::underline = CC_ATTR(4);
    const char *cc::bold = CC_ATTR(1);

    const char *cc::fore::black = CC_FORECOLOR(30);
    const char *cc::fore::blue = CC_FORECOLOR(34);
    const char *cc::fore::red = CC_FORECOLOR(31);
    const char *cc::fore::magenta = CC_FORECOLOR(35);
    const char *cc::fore::green = CC_FORECOLOR(92);
    const char *cc::fore::cyan = CC_FORECOLOR(36);
    const char *cc::fore::yellow = CC_FORECOLOR(33);
    const char *cc::fore::white = CC_FORECOLOR(37);
    const char *cc::fore::console = CC_FORECOLOR(39);

    const char *cc::fore::lightblack = CC_FORECOLOR(90);
    const char *cc::fore::lightblue = CC_FORECOLOR(94);
    const char *cc::fore::lightred = CC_FORECOLOR(91);
    const char *cc::fore::lightmagenta = CC_FORECOLOR(95);
    const char *cc::fore::lightgreen = CC_FORECOLOR(92);
    const char *cc::fore::lightcyan = CC_FORECOLOR(96);
    const char *cc::fore::lightyellow = CC_FORECOLOR(93);
    const char *cc::fore::lightwhite = CC_FORECOLOR(97);

    const char *cc::back::black = CC_BACKCOLOR(40);
    const char *cc::back::blue = CC_BACKCOLOR(44);
    const char *cc::back::red = CC_BACKCOLOR(41);
    const char *cc::back::magenta = CC_BACKCOLOR(45);
    const char *cc::back::green = CC_BACKCOLOR(42);
    const char *cc::back::cyan = CC_BACKCOLOR(46);
    const char *cc::back::yellow = CC_BACKCOLOR(43);
    const char *cc::back::white = CC_BACKCOLOR(47);
    const char *cc::back::console = CC_BACKCOLOR(49);

    const char *cc::back::lightblack = CC_BACKCOLOR(100);
    const char *cc::back::lightblue = CC_BACKCOLOR(104);
    const char *cc::back::lightred = CC_BACKCOLOR(101);
    const char *cc::back::lightmagenta = CC_BACKCOLOR(105);
    const char *cc::back::lightgreen = CC_BACKCOLOR(102);
    const char *cc::back::lightcyan = CC_BACKCOLOR(106);
    const char *cc::back::lightyellow = CC_BACKCOLOR(103);
    const char *cc::back::lightwhite = CC_BACKCOLOR(107);
}

2
Дякуємо за код. Я додав ще один код відхилення ANSI, щоб дозволити показ жирного тексту:const char *cc::bold = CC_ATTR(1);
Drew Noakes

Дякую за доповнення Я включив це до коду класу.
Крістос Літрас

9

Ви можете використовувати послідовності втечі, якщо ваш термінал підтримує це. Наприклад:

echo \[\033[32m\]Hello, \[\033[36m\]colourful \[\033[33mworld!\033[0m\]

9

Розширена версія заголовка gon1332:

//
//  COLORS.h
//
//  Posted by Gon1332 May 15 2015 on StackOverflow
//  /programming/2616906/how-do-i-output-coloured-text-to-a-linux-terminal#2616912
//
//  Description: An easy header file to make colored text output to terminal second nature.
//  Modified by Shades Aug. 14 2018

// PLEASE carefully read comments before using this tool, this will save you a lot of bugs that are going to be just about impossible to find.
#ifndef COLORS_h
#define COLORS_h

/* FOREGROUND */
// These codes set the actual text to the specified color
#define RESETTEXT  "\x1B[0m" // Set all colors back to normal.
#define FOREBLK  "\x1B[30m" // Black
#define FORERED  "\x1B[31m" // Red
#define FOREGRN  "\x1B[32m" // Green
#define FOREYEL  "\x1B[33m" // Yellow
#define FOREBLU  "\x1B[34m" // Blue
#define FOREMAG  "\x1B[35m" // Magenta
#define FORECYN  "\x1B[36m" // Cyan
#define FOREWHT  "\x1B[37m" // White

/* BACKGROUND */
// These codes set the background color behind the text.
#define BACKBLK "\x1B[40m"
#define BACKRED "\x1B[41m"
#define BACKGRN "\x1B[42m"
#define BACKYEL "\x1B[43m"
#define BACKBLU "\x1B[44m"
#define BACKMAG "\x1B[45m"
#define BACKCYN "\x1B[46m"
#define BACKWHT "\x1B[47m"

// These will set the text color and then set it back to normal afterwards.
#define BLK(x) FOREBLK x RESETTEXT
#define RED(x) FORERED x RESETTEXT
#define GRN(x) FOREGRN x RESETTEXT
#define YEL(x) FOREYEL x RESETTEXT
#define BLU(x) FOREBLU x RESETTEXT
#define MAG(x) FOREMAG x RESETTEXT
#define CYN(x) FORECYN x RESETTEXT
#define WHT(x) FOREWHT x RESETTEXT

// Example usage: cout << BLU("This text's color is now blue!") << endl;

// These will set the text's background color then reset it back.
#define BackBLK(x) BACKBLK x RESETTEXT
#define BackRED(x) BACKRED x RESETTEXT
#define BackGRN(x) BACKGRN x RESETTEXT
#define BackYEL(x) BACKYEL x RESETTEXT
#define BackBLU(x) BACKBLU x RESETTEXT
#define BackMAG(x) BACKMAG x RESETTEXT
#define BackCYN(x) BACKCYN x RESETTEXT
#define BackWHT(x) BACKWHT x RESETTEXT

// Example usage: cout << BACKRED(FOREBLU("I am blue text on a red background!")) << endl;

// These functions will set the background to the specified color indefinitely.
// NOTE: These do NOT call RESETTEXT afterwards. Thus, they will set the background color indefinitely until the user executes cout << RESETTEXT
// OR if a function is used that calles RESETTEXT i.e. cout << RED("Hello World!") will reset the background color since it calls RESETTEXT.
// To set text COLOR indefinitely, see SetFore functions below.
#define SetBackBLK BACKBLK
#define SetBackRED BACKRED
#define SetBackGRN BACKGRN
#define SetBackYEL BACKYEL
#define SetBackBLU BACKBLU
#define SetBackMAG BACKMAG
#define SetBackCYN BACKCYN
#define SetBackWHT BACKWHT

// Example usage: cout << SetBackRED << "This text's background and all text after it will be red until RESETTEXT is called in some way" << endl;

// These functions will set the text color until RESETTEXT is called. (See above comments)
#define SetForeBLK FOREBLK
#define SetForeRED FORERED
#define SetForeGRN FOREGRN
#define SetForeYEL FOREYEL
#define SetForeBLU FOREBLU
#define SetForeMAG FOREMAG
#define SetForeCYN FORECYN
#define SetForeWHT FOREWHT

// Example usage: cout << SetForeRED << "This text and all text after it will be red until RESETTEXT is called in some way" << endl;

#define BOLD(x) "\x1B[1m" x RESETTEXT // Embolden text then reset it.
#define BRIGHT(x) "\x1B[1m" x RESETTEXT // Brighten text then reset it. (Same as bold but is available for program clarity)
#define UNDL(x) "\x1B[4m" x RESETTEXT // Underline text then reset it.

// Example usage: cout << BOLD(BLU("I am bold blue text!")) << endl;

// These functions will embolden or underline text indefinitely until RESETTEXT is called in some way.

#define SetBOLD "\x1B[1m" // Embolden text indefinitely.
#define SetBRIGHT "\x1B[1m" // Brighten text indefinitely. (Same as bold but is available for program clarity)
#define SetUNDL "\x1B[4m" // Underline text indefinitely.

// Example usage: cout << setBOLD << "I and all text after me will be BOLD/Bright until RESETTEXT is called in some way!" << endl;

#endif /* COLORS_h */

Як бачите, він має більше можливостей, таких як можливість встановити колір фону тимчасово, на невизначений час та інші функції. Я також вважаю, що це трохи привітніше для початківців і простіше запам'ятати всі функції.

#include <iostream>
#include "COLORS.h"

int main() {
  std::cout << SetBackBLU << SetForeRED << endl;
  std::cout << "I am red text on a blue background! :) " << endl;
  return 0;
}

Просто включіть файл заголовка у свій проект, і ви готові прокачатись із кольоровим термінальним висновком.


3

спробуйте мій заголовок тут, щоб швидко та просто розфарбувати текст: Колірна заголовка Еді


Escape-Sequence-Color-Header

Розфарбуйте свій вихід в Unix за допомогою C ++ !!


Параметри текстових атрибутів:

ATTRIBUTES_OFF, BOLD, UNDERSCORE, BLINK, REVERSE_VIDEO, CONCEALED


Параметри кольору:

BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE


Формат:

Загальний формат, включіть значення, яке потрібно у змінну $ $

COLOR_$Foreground_Color$_$Background_Color$
COLOR_$Text_Attribute$_$Foreground_Color$_$Background_Color$
COLOR_NORMAL  // To set color to default

напр

COLOR_BLUE_BLACK // Leave Text Attribute Blank if no Text Attribute appied
COLOR_UNDERSCORE_YELLOW_RED
COLOR_NORMAL


Використання:

Просто використовуйте для передачі потрібного кольору перед виведенням тексту та використовуйте знову, щоб встановити колір у звичайний колір після виведення тексту.

cout << COLOR_BLUE_BLACK << "TEXT" << COLOR_NORMAL << endl;
cout << COLOR_BOLD_YELLOW_CYAN << "TEXT" << COLOR_NORMAL << endl;

Це відповідь, що стосується лише посилань, і зробить марною, якщо посилання знизиться. Будь ласка, додайте код або
уточнюйте

2
Вибачте, новачок тут ... Просто додав ще трохи інформації. Дозуєте цю роботу?
Удусе

@ sjm324 Я думаю, чи підтримується програма BLINK, заснована на вашій системі
Uduse

3

Можна використовувати кольори ANSI кольорів.

використовувати ці функції.

enum c_color{BLACK=30,RED=31,GREEN=32,YELLOW=33,BLUE=34,MAGENTA=35,CYAN=36,WHITE=37};
enum c_decoration{NORMAL=0,BOLD=1,FAINT=2,ITALIC=3,UNDERLINE=4,RIVERCED=26,FRAMED=51};
void pr(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){
  cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m";
}

void prl(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){
   cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m"<<endl;
}

2

Найкращий спосіб - використовувати бібліотеку ncurses - хоча це може бути кувалдою, щоб зламати гайку, якщо ви просто хочете вивести просту кольорову рядок


3
@ Нік, боляче використовувати ncurses, щоб просто досягти певного забарвлення через ехо. :)
носій кільця

2

на оболонці OSX, це працює для мене (включаючи 2 пробіли навпроти "червоного тексту"):

$ printf "\e[033;31m  red text\n"
$ echo "$(tput setaf 1)  red text"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.