5

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)

并且Terminfo Source Format具有以下条目:

Variable: keypad_xmit
Capname: smkx
Termcap: ks
Description: Put terminal in "keypad-transmit" mode

但是 xterm 的 terminfo 实际上说的是smkx=\E[?1h\E=,这对我来说似乎很混乱(smkx 应该影响键盘,而不是光标键,对吧?)。我在这里想念什么?

4

2 回答 2

5

线

CSI ? 1 h  → Normal Cursor Mode (DECOM)

可能应该读

CSI ? 1 l  → Normal Cursor Keys (DECCKM)

smkx每个和中都有两个转义序列,rmkx因为这些功能用于curses,即用于keypad函数。

ncurses 的手册页(与其他人一样)没有明确说明,但该功能适用​​于键盘上能够在正常模式和应用程序模式之间切换的所有特殊键。这是and的一个众所周知的特性,例如在 xterm 常见问题解答中为什么我不能在 (whatever) shell 中使用光标键?.smkxrmkx

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

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

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

于 2015-04-02T09:01:52.667 回答
2

看起来您\E=缺少smkx.

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

XTerm Control Sequences 页面上也列出了它们,您会期望它们会影响键盘。

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

于 2014-01-21T23:22:20.697 回答