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):
- The sixel image begins rendering at the current cursor position
- Each sixel row (6 pixels tall) advances the cursor down by one character cell
- If the image reaches the bottom margin, the screen scrolls
- After the image is complete, the cursor is positioned on the line immediately below the image
When sixel scrolling is disabled (mode set):
- The sixel image is rendered at the upper-left corner of the screen
- The cursor position is not affected
- No scrolling occurs
Examples
printf '\e[?80l' # Enable sixel scrolling (default)
printf '\e[?80h' # Disable sixel scrolling (fixed position)
Specifications
| Specification | Section |
|---|---|
| VT330/VT340 Reference | — |
Terminal support
| Terminal | Support | Version | Notes |
|---|---|---|---|
| Terminal Emulators | |||
| Alacritty | ✗ | No | |
| Bobcat | ✓ | 0.9.0 | Sixel support confirmed via InlineImages setting, which enables Sixel and iTerm2 image protocols. |
| contour | ✓ | v0.6.2.8008 | Implemented as DECMode::NoSixelScrolling at primitives.h:690 |
| foot | ✓ | 1.7.0 | |
| Ghostty | ✗ | No | No Sixel support found in codebase |
| iTerm2 | ✓ | v20260216-nightly | |
| Kitty | ✗ | No | Sixel graphics not supported |
| Konsole | ✓ | Yes | Controls Sixel scrolling mode via m_SixelScrolling flag |
| mintty | ✓ | Yes | Implemented at src/termout.c:2483 |
| mlterm | ✓ | rel-3_8_4 | Controls sixel scrolling behavior |
| PuTTY | ✗ | No | No Sixel support |
| Rio | ✓ | v0.1.13 | Handled as PrivateMode::Unknown(80) for Sixel display mode |
| rxvt-unicode | ✗ | No | |
| st | ✗ | No | |
| terminology | ✗ | No | |
| VT100 | ✗ | No | |
| VTE | ✓ | Yes | Requires Sixel support |
| WezTerm | ✓ | Yes | |
| Windows Terminal | ✓ | Yes | DECSDM_SixelDisplayMode at adaptDispatch.cpp:1837-1843 |
| xterm | ✓ | 294 | Requires OPT_SIXEL_GRAPHICS compile flag |
| xterm.js | ✗ | No | |
| Multiplexers | |||
| cy | ✗ | No | |
| GNU Screen | ✗ | No | No Sixel support |
| tmux | ✗ | No | |
| tuios | ✗ | No | |
| Zellij | ✓ | v0.31.2 | |
See also
- Sixel Graphics — The sixel graphics protocol
- DCS — Sixel Data — Sixel data transmission via DCS