擦除显示 (ED)
擦除显示内容,具体行为取决于命令 `n`。
- 0x1B
- ESC
- 0x5B
- [
- ____
- n
- 0x4A
- J
如果未设置 n,则 n 的值为 0。n 的唯一有效值是
0、1、2 或 3。如果给出了任何其他 n 值,则不执行此序列。
此序列文档的其余部分假定 n 是有效值。
对于除 3 以外的所有有效 n 值,此序列会取消待定换行状态。
光标位置在整个序列执行期间
始终保持不变。
如果 字符选择属性选择 (DECSCA) 已启用, 或它是当前活动屏幕上最近一次启用的保护模式, 则受保护属性会被忽略。否则,受保护属性会被尊重。有关此受保护属性 处理逻辑的更多细节,请参见 擦除字符 (ECH)。
对于所有操作,如果多单元格字符会被拆分,则擦除整个多单元格字符。 例如,如果打印了“橋”,而擦除操作只会擦除该两单元格字符的第一或 第二个单元格,则两个单元格都应被擦除。
此序列不遵守任何滚动区域(顶部、底部、左侧或右侧)。 操作的边界是整个可见屏幕。
如果 n 为 0,执行擦除下方显示操作。
擦除光标右侧及下方的所有单元格。被擦除单元格的
背景色按当前 SGR 状态着色。
如果 n 为 1,执行擦除上方显示操作。
擦除光标左侧及上方的所有单元格。被擦除单元格的
背景色按当前 SGR 状态着色。
如果 n 为 2,擦除整个显示。这等同于
擦除上方(n = 1)与擦除下方(n = 0)同时执行。
如果 n 为 3,只擦除回滚缓冲区。这不会影响
屏幕的可见显示,也不会移动光标。回滚
区域是当屏幕完全滚动到底部时,目前处于
屏幕可见区域之上的终端区域。
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[2;2H"
printf "\033[0J"
|ABC_____|
|Dc______|
|________|
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[2;2H"
printf "\033[41m"
printf "\033[0J"
|ABC_____|
|Dc______|
|________|
光标右方及下方的所有单元格都应被着色为红色。
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "AB橋C\n"
printf "DE橋F\n"
printf "GH橋I\n"
printf "\033[2;4H"
printf "\033[0J"
|AB橋C___|
|DE_c____|
|________|
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[2;2H"
printf "\033[1J"
|________|
|_cF_____|
|GHI_____|
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[2;2H"
printf "\033[2J"
|________|
|_c______|
|________|