如何更改curses应用程序的背景颜色?

hol*_*lms 3 colors terminal ncurses

我讨厌在 ncurses 应用程序中随处可见的蓝色背景,例如:irssi、mc、tig ……我想改变那种颜色,我该怎么做?

我知道午夜指挥官有主题,但是所有 CLI 程序的全局设置呢?我发现setterm在 Linux 和vidcontrolFreeBSD中都有,但vidcontrol对我不起作用,我认为这不是我需要的,因为它用于 VESA 的东西。我在这里通过 ssh 工作。

Sté*_*las 6

一些像 xterm 这样的终端允许通过资源文件或动态重新定义颜色,如果它在 $TERM 的 terminfo 条目中正确公开,你可以这样做:

tput initc 4 1000 0 0
Run Code Online (Sandbox Code Playgroud)

将 ANSI 颜色 4(通常为蓝色)更改为 RGB (1000, 0 0),即亮红色。

如果终端不支持重新定义颜色(请参阅 参考资料infocmp -1 | grep initc),对于使用 terminfo 的应用程序,您还可以诱使它们发送不同的转义序列以请求颜色 4(蓝色)。

infocmp -x > terminal.info
Run Code Online (Sandbox Code Playgroud)

编辑terminal.info,将终端名称替换为“myterm”之类的名称,然后编辑“setab”属性(设置 ANSI 背景)。

代替

setab=\E[4%p1%dm
Run Code Online (Sandbox Code Playgroud)

那是:

tput setab 4
Run Code Online (Sandbox Code Playgroud)

发送^[[44m,改成:

setab=\E[4%?%p1%{4}%=%t1%e%p1%d%;m
Run Code Online (Sandbox Code Playgroud)

%? ....,当问及对“4”,并请求一个,否则是一个if-then-else的,说发送“1”。

所以

tput setab 4
Run Code Online (Sandbox Code Playgroud)

将发送^[[41m,(红色)tput setab 5并将发送^[[45m

然后,编译它:

TERMINFO=$HOME/.terminfo tic -x terminal.info
Run Code Online (Sandbox Code Playgroud)

并将其用作:

TERMINFO=$HOME/.terminfo TERM=myterm the-application-to-trick
Run Code Online (Sandbox Code Playgroud)

这仅在应用程序使用 terminfo 数据库将序列发送到终端时才有效。