左端と右端のマージン設定 (DECSLRM)

左端マージンと右端マージンを設定します。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    l
  4. 0x3B
    ;
  5. ____
    r
  6. 0x73
    s

左端マージンと右端マージン(いわゆるスクロール領域)を設定します。 スクロール領域全般の詳細は 上端と下端のマージン設定 を参照してください。

パラメーター l と r は整数値です。いずれかが 0 の場合、その値は 既定値にリセットされます。l の既定値は 1 で、 r の既定値は画面の列数です。

値 l と r は省略できます。いずれかを省略した場合、 その既定値が使われます。なお、l を省略して r を省略しないことはできません。

このシーケンスは 左右マージンの有効化 (モード 69) が 設定されていることが必要です。モード 69 が設定されていない場合、このシーケンスは何もせず、 左右マージンは設定されません。

このシーケンスは カーソル保存 (CSI s) と衝突します。モード 69 が無効な場合、カーソル保存が 呼び出されます。モード 69 が有効な場合、CSI s のカーソル保存シーケンスは無効になりますが、 カーソル保存は常に ESC 7 としても利用できます。

left が right 以上の場合、このシーケンスは何もしません。スクロール領域は 少なくとも 2 列必要です(r は l より大きくなければなりません)。 このシーケンス記述の残りの部分では、l と r が有効な値であると想定します。

このシーケンスは保留中の折り返し状態を解除し、カーソルを 画面の左上へ移動します。原点モード が設定されている場合、カーソルは スクロール領域の左上へ移動されます。

左右マージンをリセットするには、このシーケンスを両方の値を "0" にして 呼び出します。これにより l と r の既定値が 強制的に適用され、画面全体が対象になります。モード 69 を解除しても左右マージンはリセットされます。

検証

DECSLRM 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[?69h" # enable left/right margins
printf "\033[s" # scroll region left/right
printf "\033[X"
|cBC_____|
|DEF_____|
|GHI_____|

DECSLRM 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[?69h" # enable left/right margins
printf "\033[2s" # scroll region left/right
printf "\033[2G" # move cursor to column 2
printf "\033[L"
|Ac______|
|DBC_____|
|GEF_____|
| HI_____|

DECSLRM 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 "\033[?69h" # enable left/right margins
printf "\033[1;2s" # scroll region left/right
printf "\033[2G" # move cursor to column 2
printf "\033[L"
|_cC_____|
|ABF_____|
|DEI_____|
|GH______|

DECSLRM V-4: 左端が右端と等しい

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[?69h" # enable left/right margins
printf "\033[2;2s" # scroll region left/right
printf "\033[X"
|cBC_____|
|DEF_____|
|GHI_____|