for*_*all 5 terminal xterm tty termcap terminfo
XTerm控制序列指定以下键序列:
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)
Run Code Online (Sandbox Code Playgroud)
和TERMINFO源格式有如下条目:
Variable: keypad_xmit
Capname: smkx
Termcap: ks
Description: Put terminal in "keypad-transmit" mode
Run Code Online (Sandbox Code Playgroud)
但是xterm的terminfo实际上是说smkx=\E[?1h\E=,这似乎让我感到困惑(smkx应该影响键盘,而不是光标键,对吗?)。我在这里想念什么?
线
CSI ? 1 h ? Normal Cursor Mode (DECOM)
Run Code Online (Sandbox Code Playgroud)
可能应该阅读
CSI ? 1 l ? Normal Cursor Keys (DECCKM)
Run Code Online (Sandbox Code Playgroud)
每个smkxand 中都有两个转义序列,rmkx因为这些功能用于curses 中,即用于keypad函数。
ncurses(像其他人一样)的手册页没有明确说明,但该功能适用于键盘上的所有特殊键,这些键可以在正常模式和应用程序模式之间切换。这是smkxand 的一个众所周知的特性,rmkx例如在 xterm FAQ为什么我不能在(无论)shell 中使用光标键?.
键盘上的特殊键可能包括这些(取决于终端的类型):
的VT100(不具有功能键或编辑键盘)具有用于其他两个类别分开转义序列。在 VT220(由 xterm 模拟)中,编辑键盘的正常/应用模式是 VT100 DECCKM(在XTerm Control Sequences 中记录)的扩展。DEC 没有为功能键定义相应的特性;但是,如果有一些支持此功能的终端,它可能会在smkx和 中使用rmkx。
看来您错过了\E=末尾的smkx.
ESC = Application Keypad (DECKPAM).
ESC > Normal Keypad (DECKPNM).
Run Code Online (Sandbox Code Playgroud)
也列在 XTerm 控制序列页面上,您希望它们会影响键盘。
我在这里找到了一个相关的问题:keyboard Transmission mode in vt100terminal emulator。