反向索引 (RI)

將游標上移一個儲存格,必要時捲動。

  1. 0x1B
    ESC
  2. 0x4D
    M

此序列不會取消待處理的換行狀態。

若游標恰好位於 上邊界,且處於 左右邊界 之內,則以 n = 1 呼叫 向下捲動 (SD)。操作結束。

否則無需捲動。以 n = 1 執行 游標上移 操作。

驗證

RI V-1:無捲動區域,畫面頂部

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "A\n"
printf "B\n"
printf "C\n"
printf "\033[1;1H" # move to top-left
printf "\033M" # reverse index
printf "X"
|Xc________|
|A_________|
|B_________|
|C_________|

RI V-2:無捲動區域,不在畫面頂部

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "A\n"
printf "B\n"
printf "C\n"
printf "\033[2;1H"
printf "\033M" # reverse index
printf "X"
|Xc________|
|B_________|
|C_________|

RI V-3:上下捲動區域

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "A\n"
printf "B\n"
printf "C\n"
printf "\033[2;3r" # scroll region
printf "\033[2;1H"
printf "\033M" # reverse index
|A_________|
|c_________|
|B_________|

RI V-4:上下捲動區域之外

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "A\n"
printf "B\n"
printf "C\n"
printf "\033[2;3r" # scroll region
printf "\033[1;1H"
printf "\033M" # reverse index
|A_________|
|B_________|
|C_________|

RI V-5:左右捲動區域

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;3s" # scroll region left/right
printf "\033[1;2H"
printf "\033M"
|A_________|
|DBC_______|
|GEF_______|
|_HI_______|

RI V-6:左右捲動區域之外

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;3s" # scroll region left/right
printf "\033[2;1H"
printf "\033M"
|ABC_______|
|DEF_______|
|GHI_______|

游標位於 A 上。