diff --git a/website/app/vt/decslrm/page.mdx b/website/app/vt/decslrm/page.mdx new file mode 100644 index 000000000..2729d08c8 --- /dev/null +++ b/website/app/vt/decslrm/page.mdx @@ -0,0 +1,120 @@ +import VTSequence from "@/components/VTSequence"; + +# Set Left and Right Margins (DECSLRM) + + + +Sets the left and right margins, otherwise known as the scroll region. +To learn more about scroll regions in general, see +[Set Top and Bottom Margins](/vt/decstbm). + +Parameters `l` and `r` are integer values. If either value is zero the +value will be reset to default values. The default value for `l` is `1` +and the default value of `r` is the number of columns in the screen. + +Values `l` and `r` can be omitted. If either value is omitted, their +default values will be used. Note that it is impossible to omit `l` +and not omit `r`. + +This sequence requires [enable left and right margin (mode 69)](#TODO) +to be set. If mode 69 is not set, this sequence does nothing and left +and right margins will not be set. + +This sequence conflicts with [save cursor (`CSI s`)](#TODO). If +mode 69 is disabled, save cursor will be invoked. If mode 69 is enabled, +the `CSI s` save cursor sequence will be disabled, but save cursor is always +also available as `ESC 7`. + +If left is larger or equal to right, this sequence does nothing. A +scroll region must be at least two columns (`r` must be greater than `l`). +The rest of this sequence description assumes valid values for `l` and `r`. + +This sequence unsets the pending wrap state and moves the cursor to +the top-left of the screen. If [origin mode](#TODO) is set, the cursor is +moved to the top-left of the scroll region. + +To reset the left and right margins, call this sequence with both values set to +"0". This will force the default values for both `l` and `r` which is +the full screen. Unsetting mode 69 will also reset the left and right margins. + +## Validation + +### DECSLRM V-1: Full Screen + +```bash +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: Left Only + +```bash +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: Left And Right + +```bash +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: Left Equal to Right + +```bash +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_____| +```