Как использовать Escape-код ANSI для вывода цветного текста на консоли - PullRequest
5 голосов
/ 14 сентября 2011

Я читал о кодах выхода ANSI-C здесь . Пытался использовать его в C / C ++ printf / cout для раскрашивания текста, выводимого в consolde, но без успеха.

Код:

#include <iostream>

 #include <cstdio>

int main()
{

    int a=3, b=5;
    int &ref = a;

    ref = b;

    //cout << "\155\32\m" << a << b <<'\n'; //here it prints m→m 5, no colored text
    printf("\155\32\m %d",a); //here to it prints same - m→m 5, 

    getchar();

}

Как использовать эти управляющие коды для вывода цветного текста на консоль?

Я что-то упустил?

РЕДАКТИРОВАТЬ: В некотором коде C ++ я видел вызов этой функции

textcolor(10);

Но это дает ошибки компиляции в g ++ и в Visual Studio. В каком компиляторе была доступна эта функция? Какие-нибудь подробности?

Ответы [ 6 ]

8 голосов
/ 14 сентября 2011

Боюсь, вы забыли символ ESC:

#include <cstdio>

int main()
{
    printf("%c[%dmHELLO!\n", 0x1B, 32);
}

К сожалению, он будет работать только на консолях, которые поддерживают escape-последовательности ANSI (например, на консоли linux, использующей bash, или на старых консолях Windows, которые использовали ansi.sys)

6 голосов
/ 14 сентября 2011

Я создал очень простую библиотеку управления текстами некоторое время назад, будучи мультиплатформенным, она использует вызовы собственного API для Windows и escape-последовательности ANSI для остальных платформ. Он полностью документирован, и вы также можете просмотреть исходный код.

По поводу вашего конкретного вопроса, я думаю, вам не хватает некоторых кодов. Например, чтобы изменить цвет текста, вы должны использовать что-то вроде:

static const char * CSI = "\33[";
printf( "%s%s", CSI, "31m" );   // RED

Надеюсь, это поможет.

3 голосов
/ 14 сентября 2011

Экранирующие коды ANSI работали в DOS с использованием драйвера устройства ansi.sys. Они не будут работать Windows XP или выше. Вам необходимо использовать консольный API SetConsoleTextAttribute()

textcolor был доступен в компиляторе Borland Turbo C ++.

2 голосов
/ 10 января 2019

Windows 10 поддерживает ANSI Escape-последовательности на VT100 и производные технологии эмулятора терминала с расширением 256 цветов.Описание и примеры приведены на странице Последовательности виртуального терминала консоли .

std::ostringstream ss;
for (int i = 0; i < 10; ++i)
    ss << "\x1b[38;2;" << 5 * i << ";" << 255 - 10 * i << ";220m" 
        << "ANSI Escape Sequence " << i << std::endl;   
std::cout << ss.str();
2 голосов
/ 28 августа 2018

Примечание для любого, кто читает этот пост: перечитайте https://en.wikipedia.org/wiki/ANSI_escape_code#Windows "В 2016 году с Windows 10« Порог 2 »Microsoft неожиданно начала поддерживать escape-последовательности ANSI в приложении консоли, делая перенос программного обеспечения из (или удаленный доступ к) Unix намного проще. " Windows теперь поддерживает коды ANSI, , даже если только в более новых версиях.

1 голос
/ 14 сентября 2011

Коды форматирования ANSI не поддерживаются в Windows.

http://en.wikipedia.org/wiki/ANSI_escape_code

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...