保存光标 (DECSC)

保存多种光标相关状态,可通过恢复光标 (DECRC) 恢复。

  1. 0x1B
    ESC
  2. 0x37
    7

以下属性会被保存:

任何时候只能保存一个光标。如果重复执行保存光标,先前保存的光标会被覆盖。

主屏幕与备用屏幕拥有各自独立的已保存光标状态。在主屏幕上保存的光标无法从备用屏幕访问,反之亦然。

验证

SC V-1:光标位置

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[1;5H"
printf "A"
printf "\0337" # Save Cursor
printf "\033[1;1H"
printf "B"
printf "\0338" # Restore Cursor
printf "X"
|B___AX____|

SC V-2:待处理换行状态

cols=$(tput cols)
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[${cols}G"
printf "A"
printf "\0337" # Save Cursor
printf "\033[1;1H"
printf "B"
printf "\0338" # Restore Cursor
printf "X"
|B________A|
|X_________|

SC V-3:SGR 属性

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[1;4;33;44m"
printf "A"
printf "\0337" # Save Cursor
printf "\033[0m"
printf "B"
printf "\0338" # Restore Cursor
printf "X"
|AX________|

"A" 与 "X" 应具有相同的样式。