^[control-codes live in libghostty-vt

Control sequences

CNL Cursor Next Line

Move the cursor down n lines, to the start of the line.

CSI Pn E
Defaults
Pn = 1
ECMA-48
§8.3.12 CNL – Cursor Next Line, p. 35
VT510
CNL—Cursor Next Line

Move the cursor Pn lines down and to the first character position of that line. A 0 is taken as 1.

It is a CUD followed by a carriage return, and behaves as those two do. The cursor stops at the bottom margin, or the last line if it started below the margin, and never scrolls. With left and right margins set, it goes to the left margin rather than the first column.

DEC STD 070 does not define CNL. The VT510 manual does, as does xterm.

Validation

CNL-1: The next line

\e[1;3H
\e[E
X
|_____|
|X____|
|_____|

CNL-2: n lines down

\e[1;3H
\e[2E
X
|_____|
|_____|
|X____|

CNL-3: Stops at the bottom margin, without scrolling

A
\e[1;3r   # region is lines 1 to 3
\e[2;3H
\e[9E
X
|A____|
|_____|
|X____|
|_____|

CNL-4: To the left margin

\e[?69h   # allow left and right margins
\e[2;4s   # margins at columns 2 and 4
\e[1;3H
\e[E
X
|_____|
|_X___|