我在C中编写了一个简单的控制台程序,它使用ANSI转义码为其文本着色。
有没有办法暂时将整个终端的背景设置为黑色,将默认字体颜色设置为浅灰色?程序结束后可以恢复吗?
我宁愿避免使用ncurses。
答案 0 :(得分:5)
可能最简单的方法是使用ANSI设置文本的背景颜色:
例如使用:
echo -e "\e[37m\e[41m"
会在红色背景上显示蓝色文字(您可以使用它来以戏剧性,易于看到的颜色测试效果)。
尽管
echo -e "\e[97m\e[40m"
在程序的持续时间内,会将前景设置为白色,将背景设置为黑色。
如果您发现背景颜色与终端之间存在一种丑陋的过渡区域,则只需打印足够数量的换行符即可擦除整个屏幕。
要在C中使用此功能,您显然需要printf
而不是echo
。
ANSI escape codes上的维基页面提供了其他信息。
答案 1 :(得分:3)
如何执行此操作取决于用户使用的终端。它可能是ANSI,可能是VT100,也可能是行式打印机。 ncurses 为你抽象这个恐怖。它使用一个信息数据库,该信息有关如何与不同类型的终端进行通信(请参阅$ TERM的内容以查看您当前使用哪一个)通常存储在/lib/terminfo
或{{1 }}
一旦你查看这些文件,你可能想重新考虑不使用 ncurses ,除非你有特殊的要求来避免它(嵌入式系统没有足够的存储空间等)。