Консоль Windows с обработкой цветов ANSI

Консоль Windows с обработкой цветов ANSI

Существует ли эмулятор консоли для Windows, который интерпретирует цветовую гамму ANSI?

Мы используем rspec, а часть нашей команды использует Windows, и специальная строка для раскрашивания для них не очень полезна ;).

решение1

Ни один из ответов на этой странице не упоминает важный аспект новой поддержкиТерминальное управление ANSIкоторый был добавлен вВиндовс 10Консольный хост в сборке 16257 (и более поздних). А именно, этоне включенопо умолчанию. Если только конкретное программное обеспечение, которое вы используете,позволяетОбработка ANSI путем вызоваУстановитьКонсольныйРежимAPI с этим ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0004)флагом, вы не увидите цвета или не получите обработку ANSI для этого приложения.

ВКЛЮЧИТЬ_ОБРАБОТКУ_ВИРТУАЛЬНОГО_ТЕРМИНАЛА0x0004
https://docs.microsoft.com/windows/console/setconsolemode

При письме сWriteFileилиWriteConsole, символы анализируются для VT100 и аналогичных последовательностей управляющих символов, которые управляют перемещением курсора, режимом цвета/шрифта и другими операциями, которые также могут быть выполнены через существующие консольные API. Для получения дополнительной информации см. Console Virtual Terminal Sequences.

Я предполагаю, что причина, по которой примеры, показанные на этой странице, работают, заключается в том, что, по-видимому, команда echo(или, возможно,пакетная обработкачасть CMD.EXEили conhost) включает обработку ANSI, вызывая только что упомянутый API. Но многие другие инструменты или исполняемые файлы, которые пишут в stdinили , stdoutмогут этого не делать, и в этом случае вы не увидите цвета для этих процессов.

К счастью, глобальное значение по умолчанию можно изменить свыбрать вкуклоняться. Ключ реестра в HKEY_CURRENT_USER\Console\VirtualTerminalLevelустанавливает глобальное поведение по умолчанию для обработки escape-последовательностей ANSI. Создайте DWORDключ (при необходимости) и задайте его значение для 1глобального включения (или 0отключения) обработки ANSI по умолчанию.

[HKEY_CURRENT_USER\Консоль]
"VirtualTerminalLevel"=dword:00000001

Обратите внимание, что этот параметр реестра управляетпо умолчанию, что означает, что это влияет только на консольные приложения, которые явно не манипулируют консольным режимом, вызывая SetConsoleMode(...). Из этого следует, что, хотя значение реестра может помочьдавать возможностьANSI дляконсольный-режим-незабываемыйприложения, это не окажет никакого влияния на какие-либоконсольный-режим-знающийприложение, которое (по какой-то причине) может явнозапрещатьАНСИ.

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

решение2

ConEmuподдерживает ANSI X3.64 с расширением цвета Xterm 256. Я автор этого эмулятора консоли.

Последовательности ANSI обрабатываются для всех процессов, запущенных на вкладках ConEmu.

Насколько мне известно, ConEmu поддерживает больше кодов, чем Ansicon.

ConEmu и ANSI X3.64 / Xterm 256 цветов

решение3

Начиная с Windows 10 TH2 (v1511), conhost.exe(и, соответственно, cmd.exe) поддерживаются управляющие последовательности ANSI, в частности цвета:

изображение со страницы MSDN, указанной ниже

TheСтраница MSDN о последовательностях виртуальных терминалов консолиобъясняет, какие последовательности поддерживаются и как их включить:

Вы можете использоватьПолучитьКонсольныйРежимиУстановитьКонсольныйРежимфлаги для настройки этого поведения. [...]

Поведение следующих последовательностей основано на VT100 и производных технологиях эмулятора терминала, в частности эмуляторе терминала xterm. Более подробную информацию о последовательностях терминала можно найти наhttp://vt100.netи вhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.html.

решение4

В настоящее время цвета консоли CMD по умолчанию не включены в Win10, поэтому, чтобы включить их, добавьте в свой код следующее:

#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD dwMode = 0;
    GetConsoleMode(hOut, &dwMode);
    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    SetConsoleMode(hOut, dwMode);

    // References:
    //SetConsoleMode() and ENABLE_VIRTUAL_TERMINAL_PROCESSING?
    //https://stackoverflow.com/questions/38772468/setconsolemode-and-enable-virtual-terminal-processing

    // Windows console with ANSI colors handling
    // https://superuser.com/questions/413073/windows-console-with-ansi-colors-handling
#endif

Связанный контент