我正在编写一个 CLI 服务器。在我的项目中,我执行以下操作(简化):
curses.setupterm("rxvt")
smkx = curses.tigetstr("smkx")
write_to_terminal_client(smkx)
检测到的 smkx 序列只有与“infocmp rxvt”匹配的“\E=”(一个糟糕的 terminfo 条目?)。
现在,当我运行我的 CLI 服务器并在 rxvt 终端上运行 telnet 连接到它时,终端会收到 smkx 序列。当 rxvt 终端上的用户按下左箭头键时,我希望将“\E[D”序列发送到 CLI 服务器(因为已设置应用程序模式)。不幸的是,当 smkx 序列已发送和未发送到终端客户端时,序列始终为“\EOD”。
我尝试将 smkx 序列硬编码为 "\E[?1h\E=" 并将其发送给客户端,但它没有改变任何东西。
终端也不响应 DECRQM 查询。
我的全貌是我的应用程序学习终端的名称并查询 terminfo 数据库以获取关键代码和其他功能。我正在运行 ubuntu 13.10。Rxvt 终端是“2.7.10”
问题:
- 我做错什么了吗?
- 如果不是,我应该如何理解 smkx="\E=" 而不是 "\E[?1h\E=" (不支持 DECCKM?)
- 如何正确检测此类情况并处理它们(回退到 ANSI 游标序列?)
问候