插入字元 (ICH)

在目前游標位置插入空白字元。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x40
    @

在目前游標位置插入 n 個空白字元,並將現有 儲存格內容右移。

參數 n 必須是大於等於 1 的整數。如果 n 小於 等於 0,則將 n 調整為 1。如果省略 n,則 n 預設為 1。

此序列總是取消待定換行狀態。

如果游標位置在 左右邊界 之外, 此序列不變更畫面,但待定換行狀態 仍會被重設。

移出右邊界之外的現有儲存格會被刪除。插入的儲存格為空白, 其背景色按目前 SGR 狀態著色。

如果多儲存格字元(如「橋」)因移動而使儲存格被攔腰拆分, 多儲存格字元可以被裁剪或擦除。典型行為是在 畫面右邊緣裁剪、在右邊界處擦除,但兩種行為均可接受。

驗證

ICH V-1:無捲動區域,符合畫面

printf "ABC"
printf "\033[1G"
printf "\033[2@"
printf "X"
|XcABC_____|

ICH V-2:SGR 狀態

printf "ABC"
printf "\033[1G"
printf "\033[41m"
printf "\033[2@"
printf "X"
|c_ABC_____|

c_ 個儲存格都應有紅色背景。ABC 個儲存格樣式應保持不變。

ICH V-3:將內容移出畫面

cols=$(tput cols)
printf "\033[${cols}G"
printf "\033[2D"
printf "ABC"
printf "\033[2D"
printf "\033[2@"
printf "X"
|_______XcA|

ICH 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[3G"
printf "ABC"
printf "\033[3G"
printf "\033[2@"
printf "X"
|__XcA_____|

ICH 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[3G"
printf "ABC"
printf "\033[1G"
printf "\033[2@"
printf "X"
|XcABC_____|

ICH V-6:拆分寬字元

cols=$(tput cols)
printf "\033[${cols}G"
printf "\033[1D"
printf "橋"
printf "\033[2D"
printf "\033[@"
printf "X"
|_______Xc_|

在這種情況下,最後一個儲存格為空白或對多儲存格字元進行裁剪都算有效。xterm 會對該字元進行裁剪,但許多其他終端機會擦除該儲存格。