设置左侧和右侧边距 (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_____|