^[control-codes live in libghostty-vt

Private modes

?2004 Bracketed Paste

Mark pasted text, so that a program can tell it from typing.

CSI ? 2004 h
xterm
Bracketed Paste Mode

With CSI ? 2004 h set, the terminal puts CSI 200 ~ before anything pasted into it and CSI 201 ~ after, so a program can tell a paste from typing: a shell need not run each pasted line as it arrives, and an editor need not auto-indent pasted code. CSI ? 2004 l stops it. It is xterm’s (dpmodes, the paste itself).

The brackets are only as safe as the paste between them: a pasted CSI 201 ~ would end the bracket early. A default xterm removes ESC from a paste before sending it, along with BS, DEL, ENQ, EOT, NUL and the characters the terminal driver treats specially, unless its allowPasteControls resource is set (removeControls, DEF_DISALLOWED_PASTE_CONTROLS).

It is off to begin with, DECSTR leaves it alone, and RIS turns it off (ReallyReset). A paste comes from the window, not from the data a case writes, so the cases check what DECRQM says. libghostty-vt passes them.

Validation

PASTE-1: Off to begin with

\e[?2004$p
|____|
reply \e[?2004;2$y

PASTE-2: Set and reset

\e[?2004h
\e[?2004$p
\e[?2004l
\e[?2004$p
|____|
reply \e[?2004;1$y\e[?2004;2$y

PASTE-3: DECSTR leaves it on

\e[?2004h
\e[!p
\e[?2004$p
|____|
reply \e[?2004;1$y

PASTE-4: RIS turns it off

\e[?2004h
\ec
\e[?2004$p
|____|
reply \e[?2004;2$y