DECTCEM Text Cursor Enable Mode
Show or hide the cursor.
CSI ? 25 h/l
- DEC STD 070
- §5.4.2 Set/Reset Text Cursor Enable Mode, p. 5-21
- VT220
- §4.6.7 Text Cursor Enable Mode (DECTCEM)
- VT510
- DECTCEM—Text Cursor Enable Mode
CSI ? 25 h shows the cursor and CSI ? 25 l hides it. Shown is the default.
Only the cursor’s symbol on the screen is affected. A hidden cursor still has its position, still moves, and text is still written where it is. DEC STD 070 asks that turning it off be immediate, and suggests that a terminal’s setup screen offer a way to turn it back on, in case a program forgets to.
On this site the cursor’s cell is outlined in the drawn terminal only while it is visible; the cursor-visible line in a case checks the mode itself.
Support
| Terminal | Version | Support | Notes |
|---|---|---|---|
| VT220 | manual, 2nd ed., 1984 | Yes | §4.6.7 Text Cursor Enable Mode (DECTCEM) |
| VT510 | manual, 1st ed., 1993 | Yes | DECTCEM |
| xterm | patch 412, xterm-411a | Yes | |
| libghostty-vt | 0f171f6 | Yes | |
| kitty | 0.49.1, run in a VM | Yes | passes the 3 cases that show it working |
| foot | 1.28.0, run in a VM | Yes | passes the 3 cases that show it working |
| pyte | 0.8.2, run as a library | Yes | passes the 2 cases that show it working |
| xterm.js headless | 6.0.0, run as a library | Yes | passes the 3 cases that show it working |
| alacritty_terminal | 0.26.0, run as a library | Yes | passes the 3 cases that show it working |
| ConEmu | build 230724, its documentation | Yes | ANSI escape codes |
| rxvt-unicode | 9.31, run in a VM | Yes | passes the 3 cases that show it working |
Validation
DECTCEM-1: Hidden where it is
\e[2;3H
\e[?25l
|_____|
|_____|
cursor 2,3
cursor-visible no
DECTCEM-2: Text is still written
\e[?25l
AB
|AB___|
cursor 1,3
cursor-visible no
DECTCEM-3: Shown again
\e[?25l
\e[?25h
|_____|
cursor-visible yes
DECTCEM-4: Shown to begin with
\e[?25$p # DECRQM: is mode 25 set?
|_____|
cursor-visible yes
reply \e[?25;1$y