DECUDK — 定义用户自定义键(DCS Pc;Pl|Ky/St;... ST)
运行时重映射 DEC 用户自定义功能键(F6–F20)—— DEC VT 遗留,xterm 及其分叉仍解析。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1bPPc;Pl|Ky/St;Ky/St;...\x1b\\\\033[
\033PPc;Pl|Ky/St;...\033\\\\e[
\ePPc;Pl|Ky/St;...\e\\ESC [
ESC P Pc ; Pl | Ky / St ; ... ESC \hex
1b 50 ... 1b 5c说明
DECUDK —— Define User-Defined Keys。DCS 帧的体以两个数字参数(`;` 分隔)开头,紧跟字面 `|`,再是若干 `Ky/St` 对(`;` 分隔)。**Pc** = 清除策略:`0` 先清空所有键、`1` 只清除即将定义的键。**Pl** = 锁定状态:`0` 锁定定义(后续 DECUDK 被忽略直到 DECSTR)、`1` 保持解锁。**Ky** = 键码(17 = F6、18 = F7、…、34 = F20;F1–F5 为终端保留)。**St** = 替换字节,逐字节两位 ASCII 十六进制。例如 DEC VT520 上把 F6 映射为发送 `vim<CR>` 即可发出 `\x1bP1;1|17/76696D0D\x1b\\`。xterm 接受 DECUDK,将十六进制载荷写入对应 PF 键的转译表。自带快捷键 UI 的现代终端(kitty、wezterm)通常忽略 DECUDK 而依赖配置文件;xterm、mintty 与部分工业终端仍实现。今日价值:DEC 遗留软件、终端测试套件(`vttest` 含 DECUDK 测试页)、终端模拟器开发。
规范出处: DEC STD 070 (DECUDK) / xterm-ctlseqs
示例
# Map F6 to literally type 'vim\\n' when pressed (key code 17, hex 76 69 6d 0d):\nprintf '\033P1;1|17/76696D0D\033\\'import sys; sys.stdout.write('\x1bP1;1|17/76696D0D\x1b\\\\')fmt.Print("\x1bP1;1|17/76696D0D\x1b\\\\")process.stdout.write('\x1bP1;1|17/76696D0D\x1b\\\\')printf("\x1bP1;1|17/76696D0D\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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |