向上捲動 (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_____|