跳到主要内容
ansicode

XTSMGRAPHICS — Sixel / ReGIS / 颜色寄存器容量查询 + 设置(CSI ? Pi ; Pa ; Pv S)

查询 / 设置终端的图形上限 —— sixel 颜色寄存器数、sixel 图形区域、ReGIS 图形区域。图像感知 TUI 决定位图大小的标准入口。

字节形式

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

\\x1b[\x1b[?<Pi>;<Pa>;<Pv>S
\\033[\033[?1;1S
\\e[\e[?1;1S
ESC [ESC [ ? Pi ; Pa ; Pv S
hex1b 5b 3f ... 53

说明

xterm 的图形能力原语。前缀 `?` 把末字节 `S` 从 SU(向上滚动)切换为 XTSMGRAPHICS —— 注意与 SU 的解析二义性(`\x1b[<Ps>S` 无 `?` 是向上滚动)。三个参数:**`Pi` 项** = `1` 颜色寄存器、`2` sixel 图形区域(像素行 × 列)、`3` ReGIS 图形区域。**`Pa` 操作** = `1` 读取当前值、`2` 重置为默认、`3` 设为 `Pv`、`4` 读取最大值。**`Pv` 取值**仅当 `Pa=3`(设置)时使用。回复格式 `\x1b[?<Pi>;<Ps>;<Pv>S`,`Ps` 是状态码(`0` 成功、`1` 错误 / 无图形、`2` 重置错误、`3` 设置错误、`4` 超界)。对发 sixel 的 TUI(如 neovim 的 image.nvim、w3m-img、timg、chafa)至关重要:绘图前先查询 `\x1b[?1;4S`(最大颜色寄存器数)与 `\x1b[?2;1S`(当前 sixel 区域),据此调整抖动调色板与瓦片尺寸。xterm 默认值偏小(256 个颜色寄存器、1000×1000 像素 sixel 区域);kitty 暴露的值很大;alacritty / gnome-terminal / Windows Terminal 返回错误或无回应(不支持 sixel)。务必检查回复里的状态码 —— `Ps=1` 表示终端宣告「无图形支持」,应回退到半块字符或 ASCII 美术。

规范出处: xterm-ctlseqs (XTSMGRAPHICS)

参数

Pi项选择:`1` 颜色寄存器、`2` sixel 区域、`3` ReGIS 区域。
Pa操作:`1` 读取、`2` 重置、`3` 设置(用 Pv)、`4` 读最大。
PvPa=3 时的设置值。其他情况省略。

示例

bash
printf '\033[?1;4S'   # query max color registers — reply: \x1b[?1;0;<max>S
python
import sys\nsys.stdout.write('\x1b[?2;1S')   # current sixel pixel area\n# reply: \x1b[?2;0;<rows>;<cols>S
go
fmt.Print("\x1b[?1;3;1024S")   // try to RAISE color registers to 1024 (kitty allows)
javascript
process.stdout.write('\x1b[?3;1S')   // query current ReGIS area
c
printf("\x1b[?2;4S");   /* before sixel encode: ask max canvas size, scale image to fit */

终端支持

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

相关序列