Skip to main content

Blink cursor

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!
Experimental

Blink Cursor (Mode 12) is a DECSET/DECRST mode that controls whether the text cursor blinks.

Syntax​

CSI ? 12 h    DECSET — Enable cursor blinking
CSI ? 12 l DECRST — Disable cursor blinking (steady cursor)
Formal syntax
DECSET-mode12 = 0x1b, "[", "?", "1", "2", "h" ;
DECRST-mode12 = 0x1b, "[", "?", "1", "2", "l" ;

Description​

Mode 12 originates from the AT&T 610 terminal (att610) and was adopted by XTerm as a way to toggle cursor blinking.

  • Set — The cursor blinks at a rate determined by the terminal.
  • Reset — The cursor is steady (does not blink). This is the default in many terminals.

Relationship to DECSCUSR​

Mode 12 provides a simple on/off toggle for cursor blinking. The DECSCUSR (Set Cursor Style) sequence CSI Ps SP q offers more fine-grained control, allowing the application to set both the cursor shape (block, underline, bar) and the blink state simultaneously.

When both Mode 12 and DECSCUSR are used, the most recently issued command typically takes precedence, though this behavior varies across terminals.

DECSCUSR ValueShapeBlink
0 or 1BlockBlink
2BlockSteady
3UnderlineBlink
4UnderlineSteady
5BarBlink
6BarSteady
note

The blink rate is not standardized and varies between terminal emulators, typically ranging from 500ms to 1000ms per cycle.

Examples​

printf '\e[?12h'     # Enable cursor blinking
printf '\e[?12l' # Disable cursor blinking (steady)

Specifications​

SpecificationSection
XTerm ctlseqs—

Terminal support​

TerminalSupportVersionNotes
Terminal Emulators
Alacritty✓YesBlinking cursor mode
Bobcat✓0.9.0Implemented in TerminalCtrl library. Configurable via BlinkingCursor setting.
contour✓v0.1.0ATT610 blinking cursor (mode 12) implemented as DECMode::BlinkingCursor in primitives.h line 682, mapped in mode conversion functions at lines 819 and 869
foot✓YesCursor blinking mode
Ghostty✓v1.0.0Cursor blinking mode
iTerm2✓YesCursor blink control via blinkingCursor property
Kitty✓YesMode 12 controls cursor blinking
Konsole✗NoMode 12 (att610 cursor blink) escape sequences are explicitly ignored; cursor blinking is controlled via profile settings
mintty✓YesMode 12 blinking cursor implemented at src/termout.c:2433-2436
mlterm✓3.8.2att610 style cursor blinking mode
PuTTY✗NoMode 12 (SRM echo mode) exists at terminal.c:3175-3177 but is for echo, not cursor blink; no att610 cursor blink mode found
Rio??
rxvt-unicode✓9.21PrivMode_BlinkingCursor
st✗NoExplicitly marked as IGNORED in st.c:1507
terminology✗NoRecognized but marked as TODO/ignored
VT100✗No
VTE✓YesXTERM_ATT610_BLINK mode
WezTerm✓20191229-193639-e7aa2f3Blinking cursor (DECSCUSR and StartBlinkingCursor mode 12)
Windows Terminal✓Yes
xterm✓xterm-88Mode 12 - att610 blinking cursor. Requires OPT_BLINK_CURS compile option
xterm.js✓0.10Requires quirks.allowSetCursorBlink enabled
Multiplexers
cy✗NoExplicitly ignored
GNU Screen✗NoMode 12 is commented out in src/ansi.c:1688
tmux✓3.6
tuios✗No
Zellij✗No

See also​