DECKPAM / DECKPNM — 小键盘应用 / 数字模式(ESC = / ESC >)
在数字小键盘发送应用转义序列(\eOM / \eOj …)与发送 ASCII 数字之间切换 —— vim / less / readline 小键盘行为的基础。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1b= (DECKPAM) \x1b> (DECKPNM)\\033[
\033= / \033>\\e[
\e= / \e>ESC [
ESC = / ESC >hex
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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |