# include " rang.hpp "
using namespace std ;
using namespace rang ;
int main ()
{
cout << " Plain old text "
<< style:: bold << " Rang styled text!! "
<< style::reset << endl;
}
rang зависит только от стандартной библиотеки C++, системного заголовка unistd.h
в unix и системных заголовков windows.h
и io.h
в системах на базе Windows. Другими словами, вам не нужны никакие сторонние зависимости.
rang — это единая библиотека только для заголовков. Поместите rang.hpp
в папку include непосредственно в дерево исходного кода проекта или куда-нибудь, доступное из вашего проекта.
Или, если вы используете менеджер пакетов conan, выполните следующие действия:
Добавьте ссылку на rand в раздел require файла conanfile.txt
вашего проекта:
[requires]
rang/3.1.0@rang/stable
Запустите команду установки Конана:
conan install
Rang использует объекты iostream — cout
/ clog
/ cerr
для применения атрибутов к выходному тексту. Поскольку Rang стремится поддерживать как Windows, так и Unix-подобные системы, он заботится о конкретных деталях ОС и пытается предоставить единый интерфейс. Из-за несовместимости разных версий ОС не все виды атрибутов поддерживаются в каждой системе, поэтому Rang попытается пропустить те, которые могут создавать мусор (вместо того, чтобы вставлять случайные escape-коды ANSI в ваши потоки). Обнаружение tty также обрабатывается внутри, поэтому вам не нужно проверять, может ли пользователь приложения перенаправить вывод в файл.
Нужна поддержка терминалов, отличных от ANSI? Ознакомьтесь с Termdb, которая поддерживает практически все терминалы и их возможности.
Помимо установки текстовых атрибутов, вы также можете попросить rang переопределить поведение по умолчанию с помощью этих методов:
void rang::setControlMode (rang::control);
где rang::control
занимает
control::Auto
— автоматически определяет, поддерживает ли терминал цвет или нет ( по умолчанию )control::Off
- Полностью отключить цветаcontrol::Force
- Принудительно использовать цвета, даже если терминал их не поддерживает или вывод перенаправляется на нетерминал void rang::setWinTermMode (rang::winTerm);
где rang::winTerm
занимает
winTerm::Auto
— проверяет наличие новых окон и выбирает Ansi, в противном случае возвращается к собственному ( по умолчанию )winTerm::Native
— этот метод поддерживается во всех версиях Windows, но поддерживает меньше атрибутов.winTerm::Ansi
— этот метод поддерживается в новых версиях Windows и поддерживает широкий спектр атрибутов.Поддерживаемые атрибуты и их совместимость перечислены ниже:
Стили текста :
Код | Linux/Win/другие | Старая победа |
---|---|---|
rang::style::bold | да | да |
rang::style::dim | да | нет |
rang::style::italic | да | нет |
rang::style::underline | да | нет |
rang::style::blink | нет | нет |
rang::style::rblink | нет | нет |
rang::style::reversed | да | да |
rang::style::conceal | может быть | да |
rang::style::crossed | да | нет |
Цвет текста :
Код | Linux/Win/другие | Старая победа |
---|---|---|
rang::fg::black | да | да |
rang::fg::red | да | да |
rang::fg::green | да | да |
rang::fg::yellow | да | да |
rang::fg::blue | да | да |
rang::fg::magenta | да | да |
rang::fg::cyan | да | да |
rang::fg::gray | да | да |
Цвет фона :
Код | Linux/Win/другие | Старая победа |
---|---|---|
rang::bg::black | да | да |
rang::bg::red | да | да |
rang::bg::green | да | да |
rang::bg::yellow | да | да |
rang::bg::blue | да | да |
rang::bg::magenta | да | да |
rang::bg::cyan | да | да |
rang::bg::gray | да | да |
Яркий цвет переднего плана :
Код | Linux/Win/другие | Старая победа |
---|---|---|
rang::fgB::black | да | да |
rang::fgB::red | да | да |
rang::fgB::green | да | да |
rang::fgB::yellow | да | да |
rang::fgB::blue | да | да |
rang::fgB::magenta | да | да |
rang::fgB::cyan | да | да |
rang::fgB::gray | да | да |
Яркий цвет фона :
Код | Linux/Win/другие | Старая победа |
---|---|---|
rang::bgB::black | да | да |
rang::bgB::red | да | да |
rang::bgB::green | да | да |
rang::bgB::yellow | да | да |
rang::bgB::blue | да | да |
rang::bgB::magenta | да | да |
rang::bgB::cyan | да | да |
rang::bgB::gray | да | да |
Сбросить стили/цвета :
Код | Linux/Win/другие | Старая победа |
---|---|---|
rang::style::reset | да | да |
rang::fg::reset | да | да |
rang::bg::reset | да | да |
Проверьте значение переменной env TERM
. Затем откройте проблему здесь и обязательно укажите значение TERM
вместе с именем вашего терминала.
cout
/ cerr
/ clog
rdbuf? Rang не вмешивается, если вы попытаетесь перенаправить cout
/ cerr
/ clog
куда-то еще, и оставляет решение за пользователем библиотеки. Обязательно прочтите этот разговор и ознакомьтесь с примером кода здесь.