上スクロール (SU)

スクロール領域の先頭から `n` 行を削除し、既存の 行を上にずらします。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x53
    S

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

このシーケンスは、カーソル位置をスクロール領域の先頭に設定した 行削除 (DL) を実行します。DL とのいくつかの違いは 以下で説明します。

操作後のカーソル位置は、SU 呼び出し時から変更されていない必要があります。保留中の折り返し状態は_解除されません_。

検証

SU 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[S"
|DEF_____|
|GHI_____|

SU 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[2;3r" # scroll region top/bottom
printf "\033[1;1H"
printf "\033[S"
|ABC_____|
|GHI_____|

SU V-3: 左右スクロール領域

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[S"
|AEF423__|
|DHI756__|
|G___89__|

SU V-4: 保留中の折り返し状態の維持

cols=$(tput cols)
printf "\033[1;${cols}H" # move to top-right
printf "\033[2J" # clear screen
printf "A"
printf "\033[2;${cols}H"
printf "B"
printf "\033[3;${cols}H"
printf "C"
printf "\033[S"
printf "X"
|_______B|
|_______C|
|________|
|X_______|

SU V-5: 上下スクロール領域全体をスクロール

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "top"
printf "\033[5;1H"
printf "ABCDEF"
printf "\033[2;5r" # scroll region top/bottom
printf "\033[4S"
|top_____|