文字削除 (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____|

最も右の 2 つのセルには赤い背景色が付くはずです。

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