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 Value | Shape | Blink |
|---|---|---|
0 or 1 | Block | Blink |
2 | Block | Steady |
3 | Underline | Blink |
4 | Underline | Steady |
5 | Bar | Blink |
6 | Bar | Steady |
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
| Specification | Section |
|---|---|
| XTerm ctlseqs | — |
Terminal support
| Terminal | Support | Version | Notes |
|---|---|---|---|
| Terminal Emulators | |||
| Alacritty | ✓ | Yes | Blinking cursor mode |
| Bobcat | ✓ | 0.9.0 | Implemented in TerminalCtrl library. Configurable via BlinkingCursor setting. |
| contour | ✓ | v0.1.0 | ATT610 blinking cursor (mode 12) implemented as DECMode::BlinkingCursor in primitives.h line 682, mapped in mode conversion functions at lines 819 and 869 |
| foot | ✓ | Yes | Cursor blinking mode |
| Ghostty | ✓ | v1.0.0 | Cursor blinking mode |
| iTerm2 | ✓ | Yes | Cursor blink control via blinkingCursor property |
| Kitty | ✓ | Yes | Mode 12 controls cursor blinking |
| Konsole | ✗ | No | Mode 12 (att610 cursor blink) escape sequences are explicitly ignored; cursor blinking is controlled via profile settings |
| mintty | ✓ | Yes | Mode 12 blinking cursor implemented at src/termout.c:2433-2436 |
| mlterm | ✓ | 3.8.2 | att610 style cursor blinking mode |
| PuTTY | ✗ | No | Mode 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.21 | PrivMode_BlinkingCursor |
| st | ✗ | No | Explicitly marked as IGNORED in st.c:1507 |
| terminology | ✗ | No | Recognized but marked as TODO/ignored |
| VT100 | ✗ | No | |
| VTE | ✓ | Yes | XTERM_ATT610_BLINK mode |
| WezTerm | ✓ | 20191229-193639-e7aa2f3 | Blinking cursor (DECSCUSR and StartBlinkingCursor mode 12) |
| Windows Terminal | ✓ | Yes | |
| xterm | ✓ | xterm-88 | Mode 12 - att610 blinking cursor. Requires OPT_BLINK_CURS compile option |
| xterm.js | ✓ | 0.10 | Requires quirks.allowSetCursorBlink enabled |
| Multiplexers | |||
| cy | ✗ | No | Explicitly ignored |
| GNU Screen | ✗ | No | Mode 12 is commented out in src/ansi.c:1688 |
| tmux | ✓ | 3.6 | |
| tuios | ✗ | No | |
| Zellij | ✗ | No | |
See also
- DECSCUSR — Set Cursor Style — Fine-grained cursor shape and blink control
- DECTCEM — Text Cursor Enable Mode — Show or hide the cursor entirely