我正在尝试让我正在运行的程序显示明亮的彩色背景,但该程序不会应用亮度增加,而是显示“正常”彩色背景。
让我添加一些细节:
- 我通过 PuTTY 登录到运行 Debian 的服务器,并将
TERM
变量设置为putty
(或使用 手动执行此操作export TERM=putty
)。 我首先尝试使用明亮的背景是否正确显示
echo -e "\e[43mHello\e[0m \e[103mWorld\e[0m"
你看到这
\e[43m
是设置背景为黄色的代码,也是\e[103m
设置背景颜色为亮黄色的代码。下图显示它确实有效:然后我运行我想要显示如此明亮的背景的程序。该程序是 ACUCOBOL 运行时。该手册说,如果在 *nix 操作系统上使用,它会尝试读取该
TERM
值并按该值读取/etc/a_termcap
,选择(希望)正确的终端功能。 Windows 客户端不使用任何终端功能信息。文件中的条目
a_termcap
如下所示:putty|/PuTTY Colors:\ :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:k6=\E[17~:k7=\E[18~:\ :k8=\E[19~:k9=\E[20~:k0=\E[21~:K1=\E[23~:K2=\E[24~:\ :KE=\E[4~:KI=\E[2~:ku=\E[A:kd=\E[B:kl=\E[D:kr=\E[C:\ :kh=\E[1~:al=\E[L:dl=\E[M:KX=\E[3~:li#25:DI=\E[m:kN=\E[G:kP=\E[I:\ :cl=\E[;H\E[J:cm=\E[%i%d;%dH:ce=\E[K:cd=\E[J:DL:nd=\E[C:\ :RV=\E[7m:HI=\E[0;1m:LO=\E[m:BL=\E[5m:UL=\E[4m:RB=\E[5;7m:RU=\E[4;7m:\ :C1=\E[30m:C2=\E[34m:C3=\E[32m:C4=\E[36m:C5=\E[31m:C6=\E[35m:\ :C7=\E[33m:C8=\E[37m:AC:\ :B1=\E[40m:B2=\E[44m:B3=\E[42m:B4=\E[46m:B5=\E[41m:B6=\E[45m:\ :B7=\E[43m:B8=\E[47m:UL@:RU@:\ :GO=\016:GF=\017:\ :GM=\161\170\154\153\155\152\166\164\167\165\156:
问题是我几乎无法读取这些值,但我认为代码
C1
……C8
和B1
……B8
分别指的是前景色和背景色。
我的猜测是运行时不知道这些代码\e[100m
......。\e[107m
我怎样才能解决这个问题?
编辑
看来我可以以某种方式能让黑色和白色变得明亮。下面的屏幕截图允许黑白的明亮和正常变体。
编辑
我已将终端模拟器名称更改为putty
并相应地设置TERM
变量。不过,我认为这并不重要。
答案1
简短:你不能
长: 的阿库科博尔支持页面解释了 termcap 字段是什么。它知道关于8颜色,而您的示例期望使用aixterm 16 色控件。处理所有 16 种颜色超出了 termcap 应用程序的能力(除非它作弊并格式化自己的字符串而不是使用tgoto
)。
您可以使所有背景都使用明亮的颜色,但不能使某些场景明亮而另一些场景不明亮。需要修改的地方是B1
(B8
通常编号约定中的颜色 0-7):
:B1=\E[40m:B2=\E[44m:B3=\E[42m:B4=\E[46m:B5=\E[41m:B6=\E[45m:\
:B7=\E[43m:B8=\E[47m:
将 40 替换为 100,将 41 替换为 101,等等。
顺便说一句,TERM=linux
与您给出的转义序列示例不一致(因为 Linux 控制台的 16 种颜色是通过组合来实现的大胆的用颜色0-7,即替换40
经过40;1
, ETC)。您可以复制该条目并更改第一行中的名称
linux|/Linux system console:\
到更合适的东西,例如,
putty|bright-backgrounds:\
termcap 描述无法生成两个范围内的值(例如 40-47、100-107),因为它不支持表达式。 terminfo 描述(显然 ACUCOBOL 不支持)可以做到这一点。例如,ncurses 有一个16色Linux描述。其他终端也有类似的描述,包括您实际使用的任何终端。