?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