XTerm Control Sequences指定以下键序列:
CSI ? 1 h → Application Cursor Keys (DECCKM)
CSI ? 1 l → Normal Cursor Mode (DECOM)
CSI ? 66 h → Application keypad (DECNKM)
CSI ? 66 l → Numeric keypad (DECNKM)
并且Terminfo Source Format包含以下条目:
Variable: keypad_xmit
Capname: smkx
Termcap: ks
Description: Put terminal in "keypad-transmit" mode
但xterm的terminfo实际上是smkx=\E[?1h\E=
,这似乎与我混在一起(smkx会影响键盘,而不是光标键,对吗?)。我在这里缺少什么?
答案 0 :(得分:4)
该行
CSI ? 1 h → Normal Cursor Mode (DECOM)
可能应该阅读
CSI ? 1 l → Normal Cursor Keys (DECCKM)
smkx
和rmkx
各有两个转义序列,因为这些功能用于curses,即keypad
函数。
ncurses的手册页(和其他人一样)没有明确说明,但该功能适用于键盘上所有能够在 normal <之间切换的特殊键 / em>和应用程序模式。这是smkx
和rmkx
的众所周知的功能,例如xterm常见问题Why can't I use the cursor keys in (whatever) shell?。
键盘上的特殊键可能包含这些键(取决于终端的类型):
VT100(没有功能键或编辑键盘)具有其他两个类别的单独转义序列。在VT220中(由xterm模拟),编辑键盘的正常/应用模式是VT100 DECCKM的扩展,(在XTerm Control Sequences中记录)。 DEC没有为功能键定义相应的功能;但是,如果某个终端支持此功能,则可能会在smkx
和rmkx
中使用。
答案 1 :(得分:2)
您似乎错过\E=
末尾的smkx
。
ESC = Application Keypad (DECKPAM).
ESC > Normal Keypad (DECKPNM).
也列在XTerm控制序列页面上,您可能希望它们影响键盘。
我在这里找到了一个相关的问题:keyboard transmit mode in vt100 terminal emulator。