Skip to main content

DECSDM

AI-Generated Content
This page was generated with the assistance of AI and may contain inaccuracies. It is intended as a placeholder for future human verification. If you spot issues ahead of its initial review, please report them on GitHub!
Standard

DECSDM (Mode 80) is a DECSET/DECRST mode that controls whether sixel graphics are displayed in scrolling mode or at a fixed screen position.

Syntax​

CSI ? 80 h    DECSET — Disable sixel scrolling (fixed position)
CSI ? 80 l DECRST — Enable sixel scrolling
Formal syntax
DECSET-mode80 = 0x1b, "[", "?", "8", "0", "h" ;
DECRST-mode80 = 0x1b, "[", "?", "8", "0", "l" ;

Description​

Per the VT330/VT340 Programmer Reference, DECSDM (Sixel Display Mode) controls how sixel graphics data is positioned on the screen.

  • Set (sixel scrolling disabled) — Sixel graphics are drawn at a fixed position on the screen, starting at the upper-left corner of the display. The cursor position is not used and does not change. The sixel image overwrites whatever is at the fixed location.
  • Reset (sixel scrolling enabled) — Sixel graphics are drawn starting at the current cursor position. After the sixel data is complete, the cursor advances to the line below the image. If the image extends beyond the bottom of the scrolling region, the screen scrolls to accommodate it. This is the default.
caution

The sense of this mode is inverted from what many expect: set (h) disables scrolling, and reset (l) enables scrolling. This is because the original DEC hardware defaulted to the scrolling behavior and the mode was added to allow the older fixed-position behavior.

Sixel scrolling behavior​

When sixel scrolling is enabled (mode reset, the default):

  1. The sixel image begins rendering at the current cursor position
  2. Each sixel row (6 pixels tall) advances the cursor down by one character cell
  3. If the image reaches the bottom margin, the screen scrolls
  4. After the image is complete, the cursor is positioned on the line immediately below the image

When sixel scrolling is disabled (mode set):

  1. The sixel image is rendered at the upper-left corner of the screen
  2. The cursor position is not affected
  3. No scrolling occurs

Examples​

printf '\e[?80l'     # Enable sixel scrolling (default)
printf '\e[?80h' # Disable sixel scrolling (fixed position)

Specifications​

SpecificationSection
VT330/VT340 Reference—

Terminal support​

TerminalSupportVersionNotes
Terminal Emulators
Alacritty✗No
Bobcat✓0.9.0Sixel support confirmed via InlineImages setting, which enables Sixel and iTerm2 image protocols.
contour✓v0.6.2.8008Implemented as DECMode::NoSixelScrolling at primitives.h:690
foot✓1.7.0
Ghostty✗NoNo Sixel support found in codebase
iTerm2✓v20260216-nightly
Kitty✗NoSixel graphics not supported
Konsole✓YesControls Sixel scrolling mode via m_SixelScrolling flag
mintty✓YesImplemented at src/termout.c:2483
mlterm✓rel-3_8_4Controls sixel scrolling behavior
PuTTY✗NoNo Sixel support
Rio✓v0.1.13Handled as PrivateMode::Unknown(80) for Sixel display mode
rxvt-unicode✗No
st✗No
terminology✗No
VT100✗No
VTE✓YesRequires Sixel support
WezTerm✓Yes
Windows Terminal✓YesDECSDM_SixelDisplayMode at adaptDispatch.cpp:1837-1843
xterm✓294Requires OPT_SIXEL_GRAPHICS compile flag
xterm.js✗No
Multiplexers
cy✗No
GNU Screen✗NoNo Sixel support
tmux✗No
tuios✗No
Zellij✓v0.31.2

See also​