crates.io docs.rs license Workflow Status

Cross-platform clipboard management library powered by clip.

Features

Platform support

| Platform | Clear | Text (R) | Text (W) | Images (R) | Images (W) | |-----------------|:-----:|:--------:|:--------:|:----------:|:----------:| | Windows | ✅ | ✅ | ✅ | ✅ | ✅ | | macOS | ✅ | ✅ | ✅ | ✅ | ✅ | | Linux (X11) | ✅ | ✅ | ✅ | ✅ | ✅ |

Linux

Requires the libx11-dev/libX11-devel and libpng-dev/libpng-devel packages to be installed.

Thread Safety

Not all OS clipboard APIs are thread-safe, so whilst the functions in this crate do their best to be thread-safe by synchronising using an internal mutex, using other clipboard libraries or calling OS clipboard APIs directly may cause undefined behaviour.

Examples

Reading data

```rust let mut clipboard = clippers::Clipboard::get(); match clipboard.read() { Some(clippers::ClipperData::Text(text)) => { println!("Clipboard text: {:?}", text); }

Some(clippers::ClipperData::Image(image)) => {
    println!("Clipboard image: {}x{} RGBA", image.width(), image.height());
}

Some(data) => {
    println!("Clipboard data is unknown: {data:?}");
}

None => {
    println!("Clipboard is empty");
}

} ```

Writing text

rust let mut clipboard = clippers::Clipboard::get(); clipboard.write_text("Hello, world!").unwrap(); assert_eq!(clipboard.read().unwrap().into_text().unwrap(), "Hello, world!");

Writing an image

```rust let mut clipboard = clippers::Clipboard::get(); let image = image::ImageBuffer::fromfn(8, 8, |x, y| { if (x * y) % 2 == 0 { image::Rgba([255, 0, 0, 255]) } else { image::Rgba([0, 255, 0, 255]) } }); clipboard.writeimage(image.width(), image.height(), image.as_raw()).unwrap();

let clipboardimage = clipboard.read().unwrap(); asserteq!(clipboardimage.intoimage().unwrap().asraw(), image.asref()); ```