mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-09-14 18:01:58 +00:00
Follow up to #13978 `ghostty_terminal_paste` no longer takes the clipboard's data up front. The request now carries only the list of available MIME types plus a a callback that writes one representation's bytes into a `GhosttyWriter`. Previously an embedder had to load every representation for every MIME type into memory before pasting. For a clipboard holding a large image or video next to some text that could be hundreds of megabytes that were never used. I also took care to make sure that the data is only read once, to avoid any time-of-check/time-of-use (TOCTOU) issues. There is only one case where data might be fully buffered in memory now: unsafe text data that needs to be checked. This is true for how Ghostty GUI works today too.
24 lines
865 B
Markdown
24 lines
865 B
Markdown
# Example: `ghostty-vt` Paste
|
|
|
|
This contains a simple example of how to paste into a `ghostty-vt`
|
|
terminal with `ghostty_terminal_paste`: plain and bracketed (mode 2004)
|
|
text pastes, the unsafe-paste confirmation flow, and Kitty clipboard
|
|
protocol paste events (mode 5522) including the program's follow-up
|
|
clipboard read. The clipboard's data is produced on demand through a
|
|
read callback, so only what is actually pasted is ever read, and the
|
|
result streams to the pty in chunks. It also shows the terminal-free
|
|
building blocks for checking paste safety and encoding paste data.
|
|
|
|
This uses a `build.zig` and `Zig` to build the C program so that we
|
|
can reuse a lot of our build logic and depend directly on our source
|
|
tree, but Ghostty emits a standard C library that can be used with any
|
|
C tooling.
|
|
|
|
## Usage
|
|
|
|
Run the program:
|
|
|
|
```shell-session
|
|
zig build run
|
|
```
|