【发布时间】:2012-11-26 08:50:15
【问题描述】:
我用 C 语言编写了一个简单的控制台程序,它使用 ANSI 转义码为其文本着色。
有没有办法将整个终端的背景临时设置为黑色,并将默认字体颜色设置为浅灰色?程序结束后可以恢复吗?
我宁愿避免使用 ncurses。
【问题讨论】:
-
这个问题太难读了……我没看。请格式化您的问题。
我用 C 语言编写了一个简单的控制台程序,它使用 ANSI 转义码为其文本着色。
有没有办法将整个终端的背景临时设置为黑色,并将默认字体颜色设置为浅灰色?程序结束后可以恢复吗?
我宁愿避免使用 ncurses。
【问题讨论】:
可能最简单的方法是使用 ANSI 设置文本的背景颜色:
例如使用:
echo -e "\e[37m\e[41m"
将为您提供红色背景上的蓝色文本(您可以使用它来测试具有戏剧性、易于查看的颜色的效果)。
而
echo -e "\e[97m\e[40m"
将在您的程序期间将前景设置为白色,将背景设置为黑色。
如果您发现在背景颜色和终端之间出现了一种难看的过渡区域,只需打印足够数量的换行符即可擦除整个屏幕。
要在 C 中使用它,您显然需要 printf 而不是 echo。
ANSI escape codes 上的 wiki 页面有更多信息。
【讨论】:
如何执行此操作取决于用户使用的终端。它可能是 ANSI,可能是 VT100,可能是行式打印机。 ncurses 为您抽象出这种恐惧。它使用一个关于如何与不同类型终端对话的信息数据库(查看 $TERM 的内容以了解您当前使用的是哪一个)通常存储在/lib/terminfo 或/usr/share/terminfo。
一旦您查看了这些文件,您可能会想要重新考虑不使用 ncurses,除非您有特定的要求来避免它(嵌入式系统没有足够的存储空间等)
【讨论】: