7. 如果一切都行不通

首先要做的是使用 C 语言单行代码 了解某个键产生哪些 ASCII 码。

一旦您知道产生了哪些序列,您必须使用 infocmp 检查当前的 terminfo 条目(不要被打印出来的信息量吓到!),并确保kbskdch1功能对应于正确的序列(即,由各自的键产生的序列)。 此外,您必须使用 stty -a 检查擦除字符是否为 退格键 发出的字符(请注意^H代表 BS,而^?代表 DEL)。

如果存在不匹配,则可能存在几种不同的原因:TERM变量的内容错误,终端数据库的条目错误,X 下的终端模拟错误。 我希望此时您有足够的信息来独立挖掘解决方案。

Note

如果不同的应用程序表现出不同的行为,则很可能是其中一些应用程序正确使用了终端数据库,而另一些则没有。 请记住,某些键在特定应用程序中产生正确的行为并不意味着该应用程序正确使用了终端数据库——它们可能只是偶然有效。 如果您想进行独立检查,可以尝试 ne 编辑器是否有效。ne 使用所有终端功能,包括kbskdch1,并且仅将预期含义作为最后手段使用。