行消去 (EL)

コマンド `n` に応じて行の内容を消去します。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x4B
    K

n が設定されていない場合、n の値は 0 です。n の有効な値は 0、1、2 だけです。その他の n の値が指定された場合、このシーケンスを実行しません。 このシーケンス文書の残りの部分では、n が有効な値であると想定します。

すべての有効な n の値で、このシーケンスは保留中の折り返し状態を解除します。 カーソル位置はこのシーケンスの実行中は すべての状況下で変化しません。

文字選択属性の選択 (DECSCA) が有効であるか、 現在アクティブな画面で最後に有効化された保護モードである場合、 保護属性は無視されます。それ以外の場合、保護属性は尊重されます。保護属性を 扱うこのロジックの詳細は 文字消去 (ECH) を参照してください。

すべての操作で、複数セル文字が分割される場合は、その複数セル文字全体を消去します。 たとえば、「橋」が表示されていて、消去対象がその 2 セル文字の 最初のセルまたは 2 つ目のセルのどちらか一方だけでも、2 つのセルの両方を消去します。

n が 0 の場合、右側行の消去操作を実行します。右側行の消去は n をカーソルから行末まで(カーソルを含む)の 残り列数に設定した 文字消去 (ECH) と同等です。 行がソフト折り返しの場合、その 1 行だけが消去されます。 折り返しをまたいだ消去はされません。さらに、その行の折り返し状態は リセットされ、その行は折り返された行とみなされなくなります。

n が 1 の場合、左側行の消去操作を実行します。これは カーソルの左側・位置の n 個のセルを空白文字に置き換え、 現在の SGR 状態に従って現在の背景色を着色します。空欄化できる 最も左の列は画面の最初の列です。 左マージン はこの操作に影響しません。

n が 2 の場合、行全体を消去します。これは 左側消去(n = 1)と右側消去(n = 0)の両方が実行されたのと同等です。

検証

EL V-1: 単純な右側消去

printf "ABCDE"
printf "\033[3G"
printf "\033[0K"
|ABc_____|

EL V-2: 右側消去による保留中の折り返しのリセット

cols=$(tput cols)
printf "\033[${cols}G" # move to last column
printf "A" # set pending wrap state
printf "\033[0K"
printf "X"
|_______X|

カーソルは「X」の上にあるべきです

EL V-3: 右側消去の SGR 状態

printf "ABC"
printf "\033[2G"
printf "\033[41m"
printf "\033[0K"
|Ac______|

c 以降、画面の右端に至るまでのすべてのセルには赤い背景が付くはずです。

EL V-4: 右側消去の複数セル文字

printf "AB橋DE"
printf "\033[4G"
printf "\033[0K"
|AB_c____|

EL V-5: 右側消去で左右スクロール領域が無視される

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABCDE"
printf "\033[?69h" # enable left/right margins
printf "\033[1;3s" # scroll region left/right
printf "\033[2G"
printf "\033[0K"
|Ac________|

EL V-6: 右側消去で DECSCA により保護属性が無視される

printf "\033V"
printf "ABCDE"
printf "\033[1\"q"
printf "\033[0\"q"
printf "\033[2G"
printf "\033[0K"
|Ac________|

EL V-7: DECSCA なしで保護属性が尊重される

printf "\033[1\"q"
printf "ABCDE"
printf "\033V"
printf "\033[2G"
printf "\033[0K"
printf "\033[1K"
printf "\033[2K"
|ABCDE_____|

EL V-8: 単純な左側消去

printf "ABCDE"
printf "\033[3G"
printf "\033[1K"
|__cDE___|

EL V-9: 左側消去の SGR 状態

printf "ABC"
printf "\033[2G"
printf "\033[41m"
printf "\033[1K"
|_cC_____|

c から左側のすべてのセルには赤い背景が付くはずです。

EL V-10: 左側消去の複数セル文字

printf "AB橋DE"
printf "\033[3G"
printf "\033[1K"
|__c_DE__|

EL V-11: 左側消去で DECSCA により保護属性が無視される

printf "\033V"
printf "ABCDE"
printf "\033[1\"q"
printf "\033[0\"q"
printf "\033[2G"
printf "\033[1K"
|_cCDE_____|

EL V-12: 単純な完全消去

printf "ABCDE"
printf "\033[3G"
printf "\033[2K"
|__c_______|

EL V-13: 完全消去の SGR 状態

printf "ABC"
printf "\033[2G"
printf "\033[41m"
printf "\033[2K"
|_c______|

行全体に赤い背景が付くはずです。