csi: add '52' to the DA reply, to indicate PSC-52 support

Note: only *copy* is required to be enabled in security.osc52; paste
is optional, see
https://github.com/contour-terminal/contour/issues/1761#issuecomment-2944492097
This commit is contained in:
Daniel Eklöf 2025-06-09 09:19:07 +02:00
parent 499f019dea
commit 968bc05c32
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 13 additions and 7 deletions

View file

@ -115,6 +115,9 @@
* Drop required version of libxkbcommon from 1.8.0 back to 1.0.0 * Drop required version of libxkbcommon from 1.8.0 back to 1.0.0
([#2103][2103]). ([#2103][2103]).
* OSC-52: an empty payload now clears the clipboard. * OSC-52: an empty payload now clears the clipboard.
* DA (Device Attributes): include `52` in the reply, to indicate
OSC-52 support (when at least _copy_ has been enabled in
`security.osc52`).
[1846]: https://codeberg.org/dnkl/foot/issues/1846 [1846]: https://codeberg.org/dnkl/foot/issues/1846
[2103]: https://codeberg.org/dnkl/foot/issues/2103 [2103]: https://codeberg.org/dnkl/foot/issues/2103

17
csi.c
View file

@ -850,6 +850,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
* - 22 ANSI color, e.g., VT525. * - 22 ANSI color, e.g., VT525.
* - 28 Rectangular editing. * - 28 Rectangular editing.
* - 29 ANSI text locator (i.e., DEC Locator mode). * - 29 ANSI text locator (i.e., DEC Locator mode).
* - 52 Clipboard access
* *
* Note: we report ourselves as a VT220, mainly to be able * Note: we report ourselves as a VT220, mainly to be able
* to pass parameters, to indicate we support sixel, and * to pass parameters, to indicate we support sixel, and
@ -860,13 +861,15 @@ csi_dispatch(struct terminal *term, uint8_t final)
* *
* Note: tertiary DA responds with "FOOT". * Note: tertiary DA responds with "FOOT".
*/ */
if (term->conf->tweak.sixel) { char reply[32];
static const char reply[] = "\033[?62;4;22;28c";
term_to_slave(term, reply, sizeof(reply) - 1); int len = snprintf(
} else { reply, sizeof(reply), "\033[?62%s;22;28%sc",
static const char reply[] = "\033[?62;22;28c"; term->conf->tweak.sixel ? ";4" : "",
term_to_slave(term, reply, sizeof(reply) - 1); (term->conf->security.osc52 == OSC52_ENABLED ||
} term->conf->security.osc52 == OSC52_COPY_ENABLED ? ";52" : ""));
term_to_slave(term, reply, len);
break; break;
} }