刪除行 (DL)

在目前游標位置刪除 `n` 行並將現有 行上移。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x4D
    M

參數 n 必須是大於等於 1 的整數。如果 n 小於 等於 0,則將 n 調整為 1。如果省略 n,則 n 預設為 1。

如果目前游標位置在目前捲動區域之外, 此序列不執行任何動作。游標在以下情況位於目前捲動區域之外: 高於 上邊界、低於 下邊界、 位於 左邊界 左側或 右邊界 右側。

此序列會取消待定換行狀態。

此序列將游標欄移動到左邊界。

移除目前捲動區域頂部的 n 行,並將現有行上移。 在捲動區域底部產生的空間應為空白,其背景色按目前 SGR 狀態設定。

如果設定了 左邊界 或 右邊界, 則只刪除或移動邊界內(含邊界)的儲存格。 左邊界左側或右邊界右側的其他現有內容保持不變。

如果多儲存格字元會被拆分,則擦除整個多儲存格字元。例如, 如果「橋」列印在左邊界左側,而由 DL 導致的行移動會拆分該字元, 則應擦除該儲存格。

驗證

DL 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[M"
|ABC_____|
|GHI_____|

DL V-2:游標在捲動區域之外

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[3;4r" # scroll region top/bottom
printf "\033[2;2H"
printf "\033[M"
|ABC_____|
|DEF_____|
|GHI_____|

DL V-3:頂部/底部捲動區域

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "123\n"
printf "\033[1;3r" # scroll region top/bottom
printf "\033[2;2H"
printf "\033[M"
|ABC_____|
|GHI_____|
|________|
|123_____|

DL V-4:左/右捲動區域

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC123\n"
printf "DEF456\n"
printf "GHI789\n"
printf "\033[?69h" # enable left/right margins
printf "\033[2;4s" # scroll region left/right
printf "\033[2;2H"
printf "\033[M"
|ABC123__|
|DHI756__|
|G___89__|