行挿入 (IL)

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

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x4C
    L

現在のカーソル位置に n 行を挿入し、既存の行を下にずらします。

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

現在のカーソル位置が現在のスクロール領域の外にある場合、 このシーケンスは何もしません。カーソルは、上マージン より上にある場合、 下マージン より下にある場合、左マージン より左にある場合、 右マージン より右にある場合に、現在のスクロール領域の外にあります。

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

このシーケンスはカーソルの列を左マージンへ移動します。

現在のカーソル行から下 n 行分に、現在の SGR 状態に従った背景色の 空行を挿入します。行が挿入されるたびに、既存のすべての内容が 1 行下へずれます。 最下段は下マージンです。内容が下マージンを越えてずらされた場合、 その内容は失われ、下マージンより下の既存内容は維持されてずらされません。

左マージン または 右マージン が設定されている場合、 マージン内(マージンを含む)のセルだけが空欄化(挿入時)または移動されます。 左マージンの左側、または右マージンの右側にあるその他の既存コンテンツは そのまま維持されます。

複数セル文字が分割される場合は、その複数セル文字全体を消去します。たとえば、 「橋」が左マージンの左側に表示されていて、IL による行の下への移動でこの文字が 分割される場合、そのセルは消去されます。

検証

IL 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[L"
|ABC_____|
|c_______|
|DEF_____|
|GHI_____|

IL 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[L"
|ABC_____|
|DEF_____|
|GHI_____|

IL 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[L"
|ABC_____|
|c_______|
|DEF_____|
|123_____|

IL 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[L"
|ABC123__|
|Dc__56__|
|GEF489__|
|_HI7____|