索引 (IND)

将光标下移一个单元格,必要时滚动。

  1. 0x1B
    ESC
  2. 0x44
    D

该序列总是取消待处理的换行状态。

如果光标恰好位于下边距,且处于或位于 左边距 与 右边距 之内,则 向上滚动 一行。 如果滚动区域是整个终端屏幕,且终端处于 主屏幕,这可能产生回滚缓冲区。更多细节请参阅 滚动 文档。

如果光标位于滚动区域之外,或不在滚动区域的下边距上,则以 n = 1 执行 光标下移 操作。

该序列仅在光标恰好位于下边距且处于剩余滚动区域之内时才会滚动。如果光标位于滚动区域之外且处于终端底行,则光标不移动。

验证

IND V-1:无滚动区域,屏幕顶部

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "A"
printf "\033D" # index
printf "X"
|A_________|
|_Xc_______|

IND V-2:主屏幕底部

lines=$(tput lines)
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[${lines};1H" # move to bottom-left
printf "A"
printf "\033D" # index
printf "X"
|A_________|
|_Xc_______|

IND V-3:滚动区域内部

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[1;3r" # scroll region
printf "A"
printf "\033D" # index
printf "X"
|A_________|
|_Xc_______|

IND V-4:滚动区域底部

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[1;3r" # scroll region
printf "\033[4;1H" # below scroll region
printf "B"
printf "\033[3;1H" # move to last row of region
printf "A"
printf "\033D" # index
printf "X"
|__________|
|A_________|
|_Xc_______|
|B_________|

IND V-5:带滚动区域的主屏幕底部

lines=$(tput lines)
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[1;3r" # scroll region
printf "\033[3;1H" # move to last row of region
printf "A"
printf "\033[${lines};1H" # move to bottom-left
printf "\033D" # index
printf "X"
|__________|
|__________|
|A_________|
|__________|
|Xc________|

IND V-6:左右滚动区域之外

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[?69h" # enable left/right margins
printf "\033[1;3r" # scroll region top/bottom
printf "\033[3;5s" # scroll region left/right
printf "\033[3;3H"
printf "A"
printf "\033[3;1H"
printf "\033D" # index
printf "X"
|__________|
|__________|
|XcA_______|

IND V-7:左右滚动区域之内

printf "\033[1;1H" # move to top-left
printf "\033[0J"   # clear screen
printf "AAAAAA\n"
printf "AAAAAA\n"
printf "AAAAAA"
printf "\033[?69h" # enable left/right margins
printf "\033[1;3s" # set scroll region left/right
printf "\033[1;3r" # set scroll region top/bottom
printf "\033[3;1H" # Move to bottom left
printf "\033D" # index
|AAAAAA____|
|AAAAAA____|
|c__AAA____|