【问题标题】:How to set terminal background color on linux terminal without using ncurses?如何在不使用 ncurses 的情况下在 linux 终端上设置终端背景颜色?
【发布时间】:2012-11-26 08:50:15
【问题描述】:

我用 C 语言编写了一个简单的控制台程序,它使用 ANSI 转义码为其文本着色。

有没有办法将整个终端的背景临时设置为黑色,并将默认字体颜色设置为浅灰色?程序结束后可以恢复吗?

我宁愿避免使用 ncurses。

【问题讨论】:

  • 这个问题太难读了……我没看。请格式化您的问题。

标签: c linux colors console


【解决方案1】:

可能最简单的方法是使用 ANSI 设置文本的背景颜色:

例如使用:

echo -e "\e[37m\e[41m"

将为您提供红色背景上的蓝色文本(您可以使用它来测试具有戏剧性、易于查看的颜色的效果)。

echo -e "\e[97m\e[40m"

将在您的程序期间将前景设置为白色,将背景设置为黑色。

如果您发现在背景颜色和终端之间出现了一种难看的过渡区域,只需打印足够数量的换行符即可擦除整个屏幕。

要在 C 中使用它,您显然需要 printf 而不是 echo

ANSI escape codes 上的 wiki 页面有更多信息。

【讨论】:

  • 看来这是唯一的解决方案,谢谢。不过,我不能赞成你的帖子,这个业力-_-
  • @user1887348,不过,如果您点击我的答案旁边的箭头下方的大复选标记,您可以接受我的回答。
【解决方案2】:

如何执行此操作取决于用户使用的终端。它可能是 ANSI,可能是 VT100,可能是行式打印机。 ncurses 为您抽象出这种恐惧。它使用一个关于如何与不同类型终端对话的信息数据库(查看 $TERM 的内容以了解您当前使用的是哪一个)通常存储在/lib/terminfo/usr/share/terminfo

一旦您查看了这些文件,您可能会想要重新考虑不使用 ncurses,除非您有特定的要求来避免它(嵌入式系统没有足够的存储空间等)

【讨论】:

  • 我知道 libncurses 很棒,但我认为它不值得付出努力。然后,应该安装 ncurses 才能运行使用 ncurses 的脚本,它不在标准包中。
  • 问题是,如果您不使用理解这些代码的终端,那么仅像建议的一个答案那样回显常量是行不通的。如果这足够好,那就太好了。但是 terminfo 数据库(以及作为它们的接口的 ncurses)是存在的,因此您不必担心。
  • 是的,与使用抽象它们的库相比,直接与终端打交道是 less '标准'和可移植的,而不是更多。您可以使用标准函数输出特定于终端的转义码这一事实并不能使您所做的事情成为标准或可移植的。
猜你喜欢
  • 2016-12-18
  • 2017-10-04
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
相关资源
最近更新 更多