文字挿入 (ICH)

現在のカーソル位置に空欄の文字を挿入します。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x40
    @

現在のカーソル位置に n 個の空欄文字を挿入し、既存の セルの内容を右へずらします。

パラメーター n は 1 以上の整数でなければなりません。n が 0 以下の 場合は n を 1 に調整します。n が省略された場合は n が既定で 1 になります。

このシーケンスは常に保留中の折り返し状態を解除します。

カーソル位置が 左右マージン の外にある場合、 このシーケンスは画面を変更しませんが、保留中の折り返し状態は それでも解除されます。

右マージンを越えてずらされた既存セルは削除されます。 挿入されたセルは空欄で、現在の SGR 状態に従った背景色が付きます。

複数セル文字(「橋」など)がずれによりセルが半分に分かれる場合、 その複数セル文字はクリップまたは消去されます。典型的な挙動は 画面の右端でクリップし、右マージンで消去しますが、 どちらの挙動でも受け入れられます。

検証

ICH V-1: スクロール領域なし・画面に収まる

printf "ABC"
printf "\033[1G"
printf "\033[2@"
printf "X"
|XcABC_____|

ICH V-2: SGR 状態

printf "ABC"
printf "\033[1G"
printf "\033[41m"
printf "\033[2@"
printf "X"
|c_ABC_____|

c_ 個のセルはどちらも赤い背景になるはずです。ABC 個のセルは スタイルがそのまま維持されるはずです。

ICH V-3: コンテンツを画面の外へずらす

cols=$(tput cols)
printf "\033[${cols}G"
printf "\033[2D"
printf "ABC"
printf "\033[2D"
printf "\033[2@"
printf "X"
|_______XcA|

ICH V-4: 左右スクロール領域の内側

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

ICH V-5: 左右スクロール領域の外側

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

ICH V-6: 分割されたワイド文字

cols=$(tput cols)
printf "\033[${cols}G"
printf "\033[1D"
printf "橋"
printf "\033[2D"
printf "\033[@"
printf "X"
|_______Xc_|

この場合、最後のセルが空欄になるか複数セル文字がクリップされても有効です。xterm は文字をクリップしますが、他の多くのターミナルはセルを消去します。