mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-14 19:45:49 +00:00
Add ghostty_paste_encode() which encodes paste data for writing to the terminal pty. It strips unsafe control bytes, wraps in bracketed paste sequences when requested, and replaces newlines with carriage returns for unbracketed mode. The input buffer is modified in place and the encoded result is written to a caller-provided output buffer, following the same buffer/out_written pattern as the other encode functions like ghostty_size_report_encode. Update the c-vt-paste example with an encode_example() demonstrating the new function and add corresponding @snippet references in the header documentation.
57 lines
1.3 KiB
C
57 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <ghostty/vt.h>
|
|
|
|
//! [paste-safety]
|
|
void safety_example() {
|
|
const char* safe_data = "hello world";
|
|
const char* unsafe_data = "rm -rf /\n";
|
|
|
|
if (ghostty_paste_is_safe(safe_data, strlen(safe_data))) {
|
|
printf("Safe to paste\n");
|
|
}
|
|
|
|
if (!ghostty_paste_is_safe(unsafe_data, strlen(unsafe_data))) {
|
|
printf("Unsafe! Contains newline\n");
|
|
}
|
|
}
|
|
//! [paste-safety]
|
|
|
|
//! [paste-encode]
|
|
void encode_example() {
|
|
// The input buffer is modified in place (unsafe bytes are stripped).
|
|
char data[] = "hello\nworld";
|
|
char buf[64];
|
|
size_t written = 0;
|
|
|
|
GhosttyResult result = ghostty_paste_encode(
|
|
data, strlen(data), true, buf, sizeof(buf), &written);
|
|
|
|
if (result == GHOSTTY_SUCCESS) {
|
|
printf("Encoded %zu bytes: ", written);
|
|
fwrite(buf, 1, written, stdout);
|
|
printf("\n");
|
|
}
|
|
}
|
|
//! [paste-encode]
|
|
|
|
int main() {
|
|
safety_example();
|
|
|
|
// Test unsafe paste data with bracketed paste end sequence
|
|
const char *unsafe_escape = "evil\x1b[201~code";
|
|
if (!ghostty_paste_is_safe(unsafe_escape, strlen(unsafe_escape))) {
|
|
printf("Data with escape sequence is UNSAFE\n");
|
|
}
|
|
|
|
// Test empty data
|
|
const char *empty_data = "";
|
|
if (ghostty_paste_is_safe(empty_data, 0)) {
|
|
printf("Empty data is safe\n");
|
|
}
|
|
|
|
encode_example();
|
|
|
|
return 0;
|
|
}
|