跳到主要内容
ansicode

DECCARA / DECRARA —— 在矩形区域中改写 / 反转字符属性(`CSI Pt;Pl;Pb;Pr;Ps;… $ r` / `$ t`)

对一矩形区域内的字符仅改写或异或 SGR 属性,不改动字符本身 —— `dec-rect-ops` 中复制 / 填充 / 擦除三件套的「矩形属性」兄弟。

字节形式

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

\\x1b[\x1b[<Pt>;<Pl>;<Pb>;<Pr>;<Ps>;…$r (DECCARA) \x1b[<Pt>;<Pl>;<Pb>;<Pr>;<Ps>;…$t (DECRARA)
\\033[\033[3;5;10;30;1;7$r
\\e[\e[3;5;10;30;1;7$r
ESC [ESC [ Pt ; Pl ; Pb ; Pr ; Ps … $ r / $ t
hex1b 5b ... 24 72 / 24 74

说明

**DECCARA** —— *矩形区域内属性改写* —— 和 **DECRARA** —— *矩形区域内属性反转* —— 完整化了 DEC 矩形操作族(其余 —— DECCRA 复制、DECFRA 填充、DECERA 擦除、DECSERA 选择性擦除 —— 见 `dec-rect-ops`)。 **几何**:`Pt;Pl;Pb;Pr` 为矩形上行 / 左列 / 下行 / 右列(皆 1 起算,闭区间)。与 `decsace` 相同的矩形约定 —— DECSACE 决定「矩形」是严格的单元块还是按行流式包裹。 **属性列表**:`Ps;…` 是类 SGR 的属性选择子列表。DEC 缩减集:`0` = 清所有属性、`1` = 加粗、`4` = 下划线、`5` = 闪烁、`7` = 反相、`22` = 取消加粗、`24` = 取消下划线、`25` = 取消闪烁、`27` = 取消反相。xterm 家族还接受标准 8 色前后景(`30–37` / `40–47`)以及 ECMA-48 扩展色(`38;5;n`、`48;2;r;g;b`);DEC 硬件忽略。空 `Ps;…`(即 `\x1b[Pt;Pl;Pb;Pr$r`)等同 `0` = 清。 **语义差**: - **DECCARA**($ r)—— *设置*所列属性到每个单元。未列出属性保持不变(不是完全 SGR 覆写 —— 是选择性的)。要换掉所有属性,先列 `0` 再列具体(如 `\x1b[1;1;24;80;0;1;7$r` 先清再设加粗 + 反相)。 - **DECRARA**($ t)—— *按位异或*每个单元上所列属性。原本加粗的变为非加粗;不加粗的变为加粗。某些屏幕渲染器用它实现「闪烁此区域」UX,省下保存 + 恢复单元状态。 **不动字符数据** —— 两者只改单元的属性层。这是杀手特性:diff 高亮器可以重写一行块的属性而不重打字符;focus 模式 TUI 可对非焦点窗格 XOR 一次 dim 实现暗化。 **DECSACE 耦合**:当 DECSACE 选择流模式(`\x1b[2*x`)时,DECCARA / DECRARA 把 `Pt;Pl` 解释为流起始位置、`Pb;Pr` 为流结束位置 —— 受影响单元为两个位置间按正常文本流的每个单元,而非块。要保块语义,发 `\x1b[0*x`(或省略)。见 `decsace`。 **覆盖度**:**xterm** = 双向完整含扩展色。**Kitty** = DECCARA 完整、DECRARA 部分。**WezTerm** / **Ghostty** = 完整。**Konsole** = 完整。**iTerm2** = 部分(DECCARA 忽略扩展色)。**Alacritty** = 静默吞掉。**Windows Terminal** = 1.20 前静默;之后 DECCARA 部分。**macOS Terminal** / **Linux console** / **cmd / ConPTY** = 静默。 **推荐用法**:xterm 家族 + 显式特性探测(DECRQM `?92` 即 DECSACE,见 `decsace`;外加 `xtversion` 检测模拟器家族)下放心用。要可移植代码,用 DECCRA + 带 SGR 重写、或对单元流式发 SGR 模拟。

规范出处: DEC VT510 RM (DECCARA / DECRARA) / xterm-ctlseqs (CSI ... $ r / $ t)

参数

Pt;Pl;Pb;Pr上行、左列、下行、右列(1 起算、闭区间)。流式 / 块式语义由 DECSACE 决定。
Ps;…类 SGR 属性选择子。常见:0 清、1 加粗、4 下划线、5 闪烁、7 反相、22 / 24 / 25 / 27 取消、30–37 / 40–47 颜色、38;5;n / 48;2;r;g;b 扩展色。空列表 = 清。

示例

bash
# Set bold + reverse on rows 3-10, cols 5-30 without touching characters.\nprintf '\\033[3;5;10;30;0;1;7$r'
python
import sys\n# XOR underline on a one-line ribbon (rows 1, cols 1..80) — 'flash on'.\nsys.stdout.write('\\x1b[1;1;1;80;4$t')\nsys.stdout.flush()
go
// 'Dim non-focused panes' — XOR SGR 2 (dim) over the unselected region.\nfmt.Print(\"\\x1b[1;1;24;40;2$t\")     // dim left half\n// later, to undim, XOR again with same selector:\nfmt.Print(\"\\x1b[1;1;24;40;2$t\")
javascript
// Highlight diff hunk: reverse-video lines 12-15 across full width.\nprocess.stdout.write('\\x1b[12;1;15;80;7$r');
c
/* Replace all attrs in rect with red-on-default. */\nprintf(\"\\x1b[%d;%d;%d;%d;0;31$r\", t, l, b, r);

终端支持

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

相关序列