我想编写一个程序,利用 Linux 终端的所有 256 种文本颜色。然而,迄今为止,我只找到了少数颜色代码,其格式为“\033[1;NUMmNUM\033[1;m”。然而,这些转义码只允许两到三打颜色,不是Linux 终端应该允许的 256。如何在我的curses
应用程序中显示其他颜色?
答案1
你可以去设置里看看TERM
。有可能它被设置为小于有能力的细绳。要测试颜色,您可以运行 GNUmsgcat
。尝试例如:
echo $TERM
msgcat --color=test
TERM=xterm-256color
msgcat --color=test
或者使用@伊格纳西奥巴斯克斯-艾布拉姆斯的循环而不是 msgcat。
欲了解更多信息如何以及要设置的内容看看例如:
- 256色终端
- 术语字符串
- 有 256 种颜色的 TTY?
- … ETC。
答案2
停止使用转义码并使用setaf
terminfo 功能。
$ for i in $(seq 0 $(tput colors) ) ; do tput setaf $i ; echo -n "█" ; done ; tput setaf 15 ; echo
答案3
TERM
告诉tput
(以及使用终端数据库的其他应用程序)您的终端(假定)支持多少种颜色以及如何为其设置前景 ( setaf
) 和背景 ( ) 。setab
示例脚本已关闭,但未正确重置:
for i in $(seq 0 $(tput colors) ) ; do tput setaf $i ; echo -n "█" ; done ; echo ; tput op
下面是 xterm 的截图来说明:
无论如何,msgcat
使用终端数据库,但随后对终端的颜色功能进行一些硬编码的假设。其中一些需要重新考虑,例如,注意到编码错误,例如这条线:
(strlen (term) >= 4 && memcmp (term, "rxvt", 7) == 0)