Skip to main content
ansicode

DECSDM — Sixel display mode (CSI ? 80 h / l)

Choose the cursor's resting position after a sixel render — at top-left of the image (private-mode set) or below the image (reset, the modern default).

Byte forms

Every common string-literal form so you can paste-and-search either direction.

\\x1b[\x1b[?80h (set) \x1b[?80l (reset)
\\033[\033[?80h / \033[?80l
\\e[\e[?80h / \e[?80l
ESC [ESC [ ? 80 h / ESC [ ? 80 l
hex1b 5b 3f 38 30 68 / 6c

Description

Sixel Display Mode — a DEC private mode that controls cursor placement after a sixel graphics block is rendered. **Set** (`\x1b[?80h`) selects DEC's original behaviour: the cursor returns to the top-left corner of the sixel image, overlapping the rendered pixels. **Reset** (`\x1b[?80l`, the default in xterm and most modern emulators) moves the cursor to the cell **below** the bottom-left corner of the image — the cell where the next character would naturally land in a paragraph below the picture. The reset behaviour is what tools like `chafa`, `timg`, `image.nvim`, `imgcat` (kitty), and `viu` assume — drawing several images stacked vertically just emits them in sequence and lets the cursor advance below each. Enabling the set mode is exclusively useful when you want to overlay text on top of a sixel image (a watermark, a label) without first moving the cursor explicitly. Note: kitty's image protocol (`dcs-kitty-graphics`) uses its own cursor-advance flag (`C=0` or `C=1`), not DECSDM — DECSDM only governs DCS-P payloads (sixel). Support is uniform across sixel-capable emulators; non-sixel emulators silently ignore.

Spec citation: DEC VT340 (Sixel) / xterm-ctlseqs

Parameters

Examples

bash
# Modern default — cursor lands below each image, so several stack vertically:\nprintf '\033[?80l'\ncat img1.six img2.six img3.six
python
import sys\nsys.stdout.write('\x1b[?80h')   # legacy DEC: cursor returns to image top-left\nwith open('logo.six', 'rb') as f: sys.stdout.buffer.write(f.read())
go
fmt.Print("\x1b[?80l")   // modern: cursor advances below sixel
javascript
process.stdout.write('\x1b[?80h')   // overlay text on next render
c
printf("\x1b[?80l");   /* required before image.nvim-style stacked render */

Terminal support

xterm
yes
Linux console (fbcon)
no
macOS Terminal.app
no
iTerm2
yes
Windows Terminal
no
cmd.exe / ConPTY
no
kitty
no
alacritty
no
WezTerm
yes
Ghostty
partial
GNOME Terminal
no
Konsole
partial
tmux
no
GNU screen
no

Related sequences