DECKPAM / DECKPNM — 小键盘应用 / 数字模式(ESC = / ESC >)
在数字小键盘发送应用转义序列(\eOM / \eOj …)与发送 ASCII 数字之间切换 —— vim / less / readline 小键盘行为的基础。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1b= (DECKPAM) \x1b> (DECKPNM)\033= / \033>\e= / \e>ESC = / ESC >1b 3d / 1b 3e说明
两个 **C1 级**转义序列(无 CSI、无参数 —— 仅 `ESC` 后跟一个末字节),切换数字小键盘的输入编码。**DECKPAM**(`\x1b=`)启用应用小键盘模式 —— 数字键 0-9 与运算符 `+`、`-`、`*`、`/`、`.`、Enter 等各发送 SS3 前缀的序列(`\x1bOq` 表示 1、`\x1bOM` 表示 Enter、`\x1bOk` 表示 `+` 等),而非字面 ASCII 字节。需要区分小键盘 `5` 与主键盘 `5` 的 curses 程序在启动时启用。**DECKPNM**(`\x1b>`)反向 —— 数字小键盘发送普通 ASCII 字节 `0`-`9` 与 `+-*/.\n`,与主键盘无差。curses 的 `keypad(stdscr, TRUE)` 进入时映射为 `\x1b=`,退出时为 `\x1b>`;vim 在主循环外发这一对;less / man 阅读器界面也类似。**注意**:方向键 / 编辑键(箭头、Home、End、PgUp、PgDn)由**另一个**模式控制 —— DECCKM(`\x1b[?1h/l`),与 DECKPAM 无关 —— 因此启用 DECKPAM **不会**改变方向键编码。两者常被一同提及,但实际是独立设置。两个序列都是 2 字节(ESC + 末字节),解析极廉价;任何需要区分小键盘输入的 TUI 都可以在进出循环时发送。
规范出处: DEC VT100 (DECKPAM / DECKPNM) / xterm-ctlseqs
参数
示例
# Enable app keypad — read what numpad-Enter sends now:\nprintf '\033='\nread -rsn 3 key # captures \x1bOM instead of \n\nprintf '\033>' # always restore on exitimport sys, termios, tty\nsys.stdout.write('\x1b=') # app keypad on\n# … TUI loop with raw stdin …\nsys.stdout.write('\x1b>') # normal keypad on exitfmt.Print("\x1b=") // DECKPAM: numpad sends SS3 sequences\ndefer fmt.Print("\x1b>") // DECKPNM: restoreprocess.stdout.write('\x1b=') // app keypad\nprocess.on('exit', () => process.stdout.write('\x1b>'))fputs("\x1b=", stdout); /* enter app keypad — pair with atexit handler emitting \x1b> */终端支持
- xterm
- 支持
- Linux console (fbcon)
- 支持
- macOS Terminal.app
- 支持
- iTerm2
- 支持
- Windows Terminal
- 支持
- cmd.exe / ConPTY
- 部分
- kitty
- 支持
- alacritty
- 支持
- WezTerm
- 支持
- Ghostty
- 支持
- GNOME Terminal
- 支持
- Konsole
- 支持
- tmux
- 不支持
- GNU screen
- 不支持
| xterm | Linux console (fbcon) | macOS Terminal.app | iTerm2 | Windows Terminal | cmd.exe / ConPTY | kitty | alacritty | WezTerm | Ghostty | GNOME Terminal | Konsole | tmux | GNU screen |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 |