#ifndef CST_CLIPBOARD_H #define CST_CLIPBOARD_H #include #ifdef __cplusplus extern "C" { #endif /* Image bytes on the system clipboard (PNG, or BMP from a Windows DIB). * Wayland: wl-paste; X11: xclip; macOS: pngpaste or osascript; Windows: the * clipboard API. Returns 0 with *data malloc'd, or -1 with err filled in * ("no image on the clipboard", "install wl-clipboard", ...). */ int cst_clipboard_image(char **data, size_t *n, char *err, size_t err_sz); /* Cap on text moved through the clipboard (read and write). */ #define CST_CLIPBOARD_TEXT_MAX (1024 * 1024) /* UTF-8 text on the system clipboard: Wayland (wl-paste), X11 (xclip), * macOS (pbpaste), Windows (CF_UNICODETEXT). Returns 0 with *data malloc'd * and NUL-terminated, or -1 with err filled in ("no text on the clipboard", * "reading the clipboard needs wl-clipboard", ...). */ int cst_clipboard_text(char **data, size_t *n, char *err, size_t err_sz); /* Replace the clipboard with UTF-8 text: wl-copy / xclip / pbcopy, or the * Windows clipboard API. Returns 0 on success, else -1 with err. */ int cst_clipboard_set_text(const char *text, size_t n, char *err, size_t err_sz); /* Windows CF_DIB bytes (BITMAPINFOHEADER + pixels) as an image file: a PNG * for uncompressed 24/32-bit bitmaps, else a BMP. NULL when malformed. */ char *cst_dib_to_image(const void *dib, size_t sz, size_t *n); #define CST_PASTE_MAX_PATHS 8 #define CST_PASTE_PATH_MAX 1024 /* Split pasted text into file paths the way terminals paste dropped files: * whitespace- or newline-separated, '...' / "..." quoting, file:// URIs * (percent-decoded) and, outside Windows, backslash escapes. Returns the * count, or -1 when the text is empty or holds more than max paths. Whether * the paths exist is up to the caller. */ int cst_paste_paths(const char *text, size_t len, char out[][CST_PASTE_PATH_MAX], int max); #ifdef __cplusplus } #endif #endif