繁体   English   中英

Eiffel:有没有一种方法可以将彩色字符打印到终端(控制台)中

[英]Eiffel: is there a way to print colorized characters into a terminal (console)

尝试编写一些记录器增强功能,我想处理ANSI代码解释,而且看来它不能与标准io.putstring方法一起使用,也不能与print我想知道是否有一种方法可以做到

在bash中echo -e "\Some_red_txt"

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

为了补充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序列。 。

使用ANSI代码解释,您可以

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM