В дополнение к ответу Джоселин те же последовательности кодов ANSI можно использовать в Windows с последним обновлением, убедившись, что консоль инициализирована для обработки последовательностей:
-- Make sure the console is allocated in a non-console application.
io.output.end_of_file.do_nothing
-- Set console to terminal mode.
initialize_terminal
-- Use ANSI codes to color text.
print ("%/27/[31mSome_red_txt")
, где
initialize_terminal
external "C inline"
alias "[
#ifdef EIF_WINDOWS
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut == INVALID_HANDLE_VALUE) return;
DWORD dwMode = 0;
if (!GetConsoleMode(hOut, &dwMode)) return;
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hOut, dwMode);
}
#endif
]"
end
После такой инициализации операторы print
работают одинаково в Windows и Linux.
Если вывод может идти не только в консоль, но также в файл, канал и т. Д.., состояние ошибки установки режима терминала на консоли Windows можно записать во внешнюю функцию и использовать позже, чтобы избежать вывода последовательностей ANSI в таких случаях.