埃菲尔铁塔:有没有办法将彩色字符打印到终端(控制台)中



尝试编写一些记录器增强功能 我想处理 ANSI 代码解释,似乎它不适用于标准io.putstring方法,也不适用于print我想知道有一种方法可以做一些事情,例如

echo -e "u001B[31mSome_red_txt"in bash

似乎其他语言可以做到,但我在埃菲尔铁塔做不到。

使用 ANSI 代码解释,您可以

print ("%/27/[31mSome_red_txt%N")
print ("%/27/[1;31mbold red text%/27/[0m%N")

您可以检查现有的 C 库,例如ncurses。 请注意,它无法在Windows控制台上运行,因为现在它不再支持ANSI代码,因此您需要使用Windows API。

为了补充 Jocelyn 的答案,可以通过确保控制台已初始化以处理序列,在具有最新更新的 Windows 上使用相同的 ANSI 代码序列:

-- 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序列。

最新更新