擦除行 (EL)

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

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x4B
    K

如果未設定 n,則 n 的值為 0。n 的唯一有效值是 0、1 或 2。如果給出了任何其他 n 值,則不執行此序列。 此序列文件的其餘部分假定 n 是有效值。

對於所有有效的 n 值,此序列會取消待定換行狀態。 游標位置在整個序列執行期間 始終保持不變。

如果 字元選擇屬性選擇 (DECSCA) 已啟用, 或它是目前作用中的畫面上最近一次啟用的保護模式, 則受保護屬性會被忽略。否則,受保護屬性會被尊重。有關此受保護屬性 處理邏輯的更多細節,請參閱 擦除字元 (ECH)。

對於所有操作,如果多儲存格字元會被拆分,則擦除整個多儲存格 字元。例如,如果列印了「橋」,而擦除操作只會擦除該兩儲存格 字元的第一或第二個儲存格,則兩個儲存格都應被擦除。

如果 n 為 0,執行擦除列右側操作。擦除列右側 等同於 擦除字元 (ECH),且 n 設為 從游標到列尾(含游標)的剩餘欄位總數。如果該列是軟換行的, 則只擦除這單列;不會透過換行擦除。此外,該列的換行 狀態會被重設,使該列不再被視為換行的。

如果 n 為 1,執行擦除列左側操作。這會把 游標左側及游標所在的 n 個儲存格替換為空白字元,並 按目前 SGR 狀態給背景著色。可以清空的最左 欄是畫面的第一欄。 左邊界 對此操作沒有影響。

如果 n 為 2,擦除整列。這等同於 擦除左(n = 1)與擦除右(n = 0)同時執行。

驗證

EL V-1:簡單擦除右

printf "ABCDE"
printf "\033[3G"
printf "\033[0K"
|ABc_____|

EL V-2:擦除右時重設待定換行

cols=$(tput cols)
printf "\033[${cols}G" # move to last column
printf "A" # set pending wrap state
printf "\033[0K"
printf "X"
|_______X|

游標應位於「X」上

EL V-3:擦除右的 SGR 狀態

printf "ABC"
printf "\033[2G"
printf "\033[41m"
printf "\033[0K"
|Ac______|

從 c 起、一直到畫面右邊緣的所有儲存格都應有紅色背景。

EL V-4:擦除右的多儲存格字元

printf "AB橋DE"
printf "\033[4G"
printf "\033[0K"
|AB_c____|

EL V-5:擦除右,左/右捲動區域被忽略

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABCDE"
printf "\033[?69h" # enable left/right margins
printf "\033[1;3s" # scroll region left/right
printf "\033[2G"
printf "\033[0K"
|Ac________|

EL V-6:擦除右,使用 DECSCA 時忽略受保護屬性

printf "\033V"
printf "ABCDE"
printf "\033[1\"q"
printf "\033[0\"q"
printf "\033[2G"
printf "\033[0K"
|Ac________|

EL V-7:不使用 DECSCA 時尊重受保護屬性

printf "\033[1\"q"
printf "ABCDE"
printf "\033V"
printf "\033[2G"
printf "\033[0K"
printf "\033[1K"
printf "\033[2K"
|ABCDE_____|

EL V-8:簡單擦除左

printf "ABCDE"
printf "\033[3G"
printf "\033[1K"
|__cDE___|

EL V-9:擦除左的 SGR 狀態

printf "ABC"
printf "\033[2G"
printf "\033[41m"
printf "\033[1K"
|_cC_____|

從 c 起向左的所有儲存格都應有紅色背景。

EL V-10:擦除左的多儲存格字元

printf "AB橋DE"
printf "\033[3G"
printf "\033[1K"
|__c_DE__|

EL V-11:擦除左,使用 DECSCA 時忽略受保護屬性

printf "\033V"
printf "ABCDE"
printf "\033[1\"q"
printf "\033[0\"q"
printf "\033[2G"
printf "\033[1K"
|_cCDE_____|

EL V-12:簡單擦除整列

printf "ABCDE"
printf "\033[3G"
printf "\033[2K"
|__c_______|

EL V-13:擦除整列的 SGR 狀態

printf "ABC"
printf "\033[2G"
printf "\033[41m"
printf "\033[2K"
|_c______|

整列都應有紅色背景。