跳到主要内容
ansicode

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 \
hex1b 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

示例

bash
# Map F6 to literally type 'vim\\n' when pressed (key code 17, hex 76 69 6d 0d):\nprintf '\033P1;1|17/76696D0D\033\\'
python
import sys; sys.stdout.write('\x1bP1;1|17/76696D0D\x1b\\\\')
go
fmt.Print("\x1bP1;1|17/76696D0D\x1b\\\\")
javascript
process.stdout.write('\x1bP1;1|17/76696D0D\x1b\\\\')
c
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
不支持

相关序列

在家族食谱中

DCS 食谱 · 4. VT 重映射面 —— DECUDK(用户自定义键)与 DECDLD(下载字形)