カーソル位置 (CUP)

カーソルを行 `y`・列 `x` へ移動します。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    y
  4. 0x3B
    ;
  5. ____
    x
  6. 0x48
    H

パラメーター y と x は 1 以上の整数でなければなりません。 いずれかが 0 以下の場合、そのパラメーターを 1 に調整します。

値 y と x はどちらも 1 から数えます。たとえば、最上行は行 1、 画面の最左列は列 1 です。

このシーケンスは常に保留中の折り返し状態を解除します。

原点モード が設定されていない場合、カーソルは y と x で 指定された行・列へ正確に移動します。y の最大値は 画面の最下行、x の最大値は画面の最右列です。

原点モード が設定されている場合、カーソル位置は スクロール領域の左上隅を基準に設定されます。y = 1 は 上マージン に、x = 1 は 左マージン に対応します。 y の最大値は 下マージン、x の最大値は 右マージン です。

原点モードが設定されている場合、このシーケンスでスクロール領域の境界外に カーソル位置を設定することはできません。

検証

CUP V-1: 通常の使用法

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[2;3H"
printf "A"
|__________|
|__Ac______|

CUP V-2: 画面の外

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[500;500H"
printf "A"
|__________|
|__________|
|_________Ac

CUP V-3: 原点を基準に

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[2;3r" # scroll region top/bottom
printf "\033[?6h" # origin mode
printf "\033[1;1H" # move to top-left
printf "X"
|__________|
|X_________|

CUP V-4: 原点を基準に(左右マージンあり)

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[?69h" # enable left/right margins
printf "\033[3;5s" # scroll region left/right
printf "\033[2;3r" # scroll region top/bottom
printf "\033[?6h" # origin mode
printf "\033[1;1H" # move to top-left
printf "X"
|__________|
|__X_______|

CUP V-5: スクロール領域と原点モードによる制限

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[?69h" # enable left/right margins
printf "\033[3;5s" # scroll region left/right
printf "\033[2;3r" # scroll region top/bottom
printf "\033[?6h" # origin mode
printf "\033[500;500H" # move to top-left
printf "X"
|__________|
|__________|
|____X_____|

CUP V-6: 保留中の折り返し状態が解除される

cols=$(tput cols)
printf "\033[${cols}G" # move to last column
printf "A" # set pending wrap state
printf "\033[1;1H"
printf "X"
|Xc_______X|