跳到主要内容
ansicode

XTQMODKEYS — 查询 modifyKeys 当前取值(CSI ? Pp m)

向 xterm 查询当前 modifyKeyboard / modifyCursorKeys / modifyFunctionKeys / modifyOtherKeys 的取值 —— XTMODKEYS 的配套查询。

字节形式

涵盖所有常见的字符串字面量写法,方便正反查找。

\\x1b[\x1b[?<Pp>m
\\033[\033[?4m
\\e[\e[?4m
ESC [ESC [ ? Pp m
hex1b 5b 3f ... 6d

说明

前缀 `?` 让末字节 `m` 从 SGR(不存在 SGR 私有子模式)切换为 XTQMODKEYS,是 XTMODKEYS(`\x1b[><Pp>;<Pv>m`)的读取对偶。`Pp` 选择查询的资源:`0` modifyKeyboard、`1` modifyCursorKeys、`2` modifyFunctionKeys、`4` modifyOtherKeys。回复是 `\x1b[><Pp>;<Pv>m` —— 与 XTMODKEYS 设置命令**形态相同**,相当于终端把当前设置原样回送给调用方。这对希望在变更前保存当前 modifyKeys 状态的库代码很有用:查询 → 变更 → 退出时恢复。多数 CSI u 协议消费者(kitty、ghostty)也能正确回复,但它们底层的键盘模型比 XTMODKEYS 更丰富,回复略有损 —— 已经在 CSI u 体系内的话,请改用 `\x1b[=u`(CSI u flags push)。终端不识别的 `Pp` 取值无任何回复,所以读取需配超时(Unix tty 上 50–100 ms 足够)。XTQMODKEYS 是少数纯状态读取、无副作用的 xterm 查询之一,可安全地插入渲染循环任何位置。

规范出处: xterm-ctlseqs (XTQMODKEYS)

参数

Pp资源选择:`0` modifyKeyboard、`1` modifyCursorKeys、`2` modifyFunctionKeys、`4` modifyOtherKeys。

示例

bash
printf '\033[?4m'   # query modifyOtherKeys — reply: \x1b[>4;<Pv>m\n# read with: IFS= read -t 0.1 -rN 32 reply
python
import sys, select\nsys.stdout.write('\x1b[?4m'); sys.stdout.flush()\n# poll stdin: if select() ready in 100ms, parse \x1b[>4;<Pv>m
go
fmt.Print("\x1b[?2m")   // query modifyFunctionKeys current value
javascript
process.stdout.write('\x1b[?0m')   // query modifyKeyboard\nprocess.stdin.once('data', buf => { /* parse reply */ })
c
printf("\x1b[?4m");   /* before mutating modifyOtherKeys, snapshot the current value */

终端支持

xterm
支持
Linux console (fbcon)
不支持
macOS Terminal.app
不支持
iTerm2
部分
Windows Terminal
部分
cmd.exe / ConPTY
不支持
kitty
支持
alacritty
部分
WezTerm
支持
Ghostty
支持
GNOME Terminal
部分
Konsole
部分
tmux
不支持
GNU screen
不支持

相关序列