我使用 PuTTY(使用“xterm”)连接到运行 Informix 的 Debian 系统。在所有 Informix 应用程序(自编写的 4GL 以及 和isql
)中i4gl
,PuTTY 都会切换背景和前景色什么时候有人按下了 Informix 无法识别的键(例如 Del 键)或尝试将长文本写入输入字段。因此,黑色背景上的灰色文本变成了灰色背景上的黑色文本。然后我必须手动重置终端(使用reset
PuTTY 自己的重置终端按钮)以恢复原始颜色。
没有其他事情发生,只是颜色变化。当颜色改变时,它确实不是无需重置终端即可改回,即使在重现切换颜色的第一步时也是如此。
我该如何禁用此行为?什么会触发此行为?从服务器发送回 PuTTY 的代码是什么,以允许客户端更改颜色?
答案1
经过大量的谷歌搜索和反复试验后,我找到了解决方案这次漫长的讨论。 概括:
Informix 尝试运行可视化铃声,但它没有使用BEL
代码(位于bel=^G
文件中terminfo
)xterm
,而是使用了代码flash
(位于文件flash=E[?5h$<100/>\E[?5l
中)。terminfo
xterm
不确定这是否是 PuTTY 错误(它知道视觉铃声,但可能不知道闪烁的屏幕)或 Informix 错误,导致闪烁“中途停止”并且不会改回来。
为了解决这个问题,我将terminfo
文件反编译为termcap
代码:
infocmp xterm > xterm.decompiled
此原始文件来自/lib/terminfo/x/
。然后我删除了相应的条目xterm.decompiled
:
flash=E[?5h$<100/>\E[?5l # remove this entry
最后用以下代码重新编译该文件
tic -s xterm.decompiled
落在了/etc/terminfo/x/xterm
。重新登录终端后,问题就消失了,因为现在我的终端根本不知道屏幕闪烁。
答案2
仅供参考,最好直接运行
infocmp > term.decompiled
不带任何参数,因为这样变量 $TERM 就会被评估。
在我的情况下,该值为“xterm-256color”,而“infocmp xterm”不会返回正确的设置。