擦除顯示 (ED)

擦除顯示內容,具體行為取決於命令 `n`。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 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,僅擦除回溯緩衝區。這不會影響 畫面的可見顯示,也不會移動游標。回溯 區域是當畫面完全捲動到底部時,目前位於 畫面可見區域之上的終端機區域。

驗證

ED V-1:簡單擦除下方

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______|
|________|

ED V-2:擦除下方的 SGR 狀態

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______|
|________|

游標右方及下方的所有儲存格都應被著色為紅色。

ED V-3:擦除下方的多儲存格字元

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____|
|________|

ED V-4:簡單擦除上方

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_____|

ED V-5:簡單擦除全部

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______|
|________|