刪除字元 (DCH)

在目前游標位置刪除 `n` 個字元並將現有 儲存格內容左移。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x50
    P

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

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

此序列會取消待定換行狀態。如果游標位置在目前 捲動區域之外,此序列_不會_取消 待定換行狀態。這一點必須明確指出,因為該行為 與 插入字元 (ICH) 不同。

只有捲動區域內的儲存格會被刪除或移動。右邊界右側的 儲存格保持不變。 從右邊界插入的空白儲存格為空白,其背景色按目前 SGR 狀態著色。

如果多儲存格字元(如「橋」)因移動而使儲存格被攔腰拆分, 多儲存格字元可以被裁剪或擦除。典型行為是在 畫面右邊緣裁剪、在右邊界處擦除,但兩種行為均可接受。

驗證

DCH V-1:簡單刪除字元

printf "ABC123"
printf "\033[3G"
printf "\033[2P"
|AB23____|

DCH V-2:SGR 狀態

printf "ABC123"
printf "\033[3G"
printf "\033[41m"
printf "\033[2P"
|AB23____|

最右側的兩個儲存格應有紅色背景色。

DCH V-3:左/右捲動區域之外

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

DCH V-4:左/右捲動區域之內

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC123"
printf "\033[?69h" # enable left/right margins
printf "\033[3;5s" # scroll region left/right
printf "\033[4G"
printf "\033[P"
|ABC2_3__|

DCH V-5:拆分寬字元

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "A橋123"
printf "\033[3G"
printf "\033[P"
|A_123_____|