設定左側與右側邊界 (DECSLRM)

設定左側與右側邊界。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    l
  4. 0x3B
    ;
  5. ____
    r
  6. 0x73
    s

設定左側與右側邊界,也稱為捲動區域。 要了解關於捲動區域的資訊,請參閱 設定頂部與底部邊界。

參數 l 和 r 是整數值。如果任一值為 0,該值將被 重設為預設值。l 的預設值是 1, r 的預設值是畫面的欄數。

值 l 和 r 可以省略。如果任一值被省略, 則使用其預設值。請注意,不可能省略 l 而不省略 r。

此序列要求先設定 啟用左右邊界 (模式 69)。 如果模式 69 未設定,此序列不執行任何動作,左右 邊界也不會被設定。

此序列與 儲存游標 (CSI s) 衝突。如果 模式 69 被停用,則會呼叫儲存游標。如果模式 69 被啟用, CSI s 儲存游標序列會被停用,但儲存游標始終 還可以透過 ESC 7 使用。

如果 left 大於等於 right,此序列不執行任何動作。捲動區域 必須至少有兩欄(r 必須大於 l)。 此序列描述的其餘部分假定 l 和 r 為有效值。

此序列會取消待定換行狀態,並將游標移到 畫面左上角。如果設定了 原點模式,游標會 移到捲動區域的左上角。

要重設左右邊界,呼叫此序列並將兩個值都設為 "0"。這將強制 l 和 r 的預設值, 即整個畫面。停用模式 69 也會重設左右邊界。

驗證

DECSLRM V-1:整個畫面

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[?69h" # enable left/right margins
printf "\033[s" # scroll region left/right
printf "\033[X"
|cBC_____|
|DEF_____|
|GHI_____|

DECSLRM V-2:僅左側

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[?69h" # enable left/right margins
printf "\033[2s" # scroll region left/right
printf "\033[2G" # move cursor to column 2
printf "\033[L"
|Ac______|
|DBC_____|
|GEF_____|
| HI_____|

DECSLRM V-3:左側與右側

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[?69h" # enable left/right margins
printf "\033[1;2s" # scroll region left/right
printf "\033[2G" # move cursor to column 2
printf "\033[L"
|_cC_____|
|ABF_____|
|DEI_____|
|GH______|

DECSLRM V-4:左側等於右側

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "ABC\n"
printf "DEF\n"
printf "GHI\n"
printf "\033[?69h" # enable left/right margins
printf "\033[2;2s" # scroll region left/right
printf "\033[X"
|cBC_____|
|DEF_____|
|GHI_____|