Terminfo smkx和应用程序游标键与应用程序键盘

时间:2014-01-17 00:15:14

标签: terminal tty xterm terminfo termcap

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会影响键盘,而不是光标键,对吗?)。我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

该行

CSI ? 1 h  → Normal Cursor Mode (DECOM)

可能应该阅读

CSI ? 1 l  → Normal Cursor Keys (DECCKM)

smkxrmkx各有两个转义序列,因为这些功能用于curses,即keypad函数。

ncurses的手册页(和其他人一样)没有明确说明,但该功能适用​​于键盘上所有能够在 normal <之间切换的特殊键 / em>和应用程序模式。这是smkxrmkx的众所周知的功能,例如xterm常见问题Why can't I use the cursor keys in (whatever) shell?

键盘上的特殊键可能包含这些键(取决于终端的类型):

  • 数字小键盘(位于PC键盘的最右侧)
  • 编辑键盘(主键盘和数字键盘之间的6个键)
  • 光标键
  • 功能键(通常位于PC键盘顶部)

VT100(没有功能键或编辑键盘)具有其他两个类别的单独转义序列。在VT220中(由xterm模拟),编辑键盘的正常/应用模式是VT100 DECCKM的扩展,(在XTerm Control Sequences中记录)。 DEC没有为功能键定义相应的功能;但是,如果某个终端支持此功能,则可能会在smkxrmkx中使用。

答案 1 :(得分:2)

您似乎错过\E=末尾的smkx

ESC =     Application Keypad (DECKPAM).
ESC >     Normal Keypad (DECKPNM).

也列在XTerm控制序列页面上,您可能希望它们影响键盘。

我在这里找到了一个相关的问题:keyboard transmit mode in vt100 terminal emulator