1 个不稳定版本

0.1.2 2022年9月18日
0.1.1 2022年9月11日
0.1.0 2022年9月11日

#1031文本处理

Download history 47/week @ 2024-04-01 9/week @ 2024-04-08 17/week @ 2024-04-15 33/week @ 2024-04-22 19/week @ 2024-04-29 13/week @ 2024-05-06 13/week @ 2024-05-13 7/week @ 2024-05-20 11/week @ 2024-05-27 18/week @ 2024-06-03 8/week @ 2024-06-10 13/week @ 2024-06-17 24/week @ 2024-06-24 21/week @ 2024-07-01 9/week @ 2024-07-08 13/week @ 2024-07-15

68 每月下载次数

MIT 许可证

105KB
3K SLoC

C++ 2K SLoC // 0.1% comments Rust 524 SLoC Objective-C++ 267 SLoC // 0.1% comments

crates.io docs.rs license Workflow Status

clip 提供支持的跨平台剪切板管理库。

功能

  • 从剪切板读取和写入 UTF-8 文本
  • 从剪切板读取和写入 RGBA 图像
  • 清除剪切板

平台支持

平台 清除 文本 (R) 文本 (W) 图像 (R) 图像 (W)
Windows
macOS
Linux (X11)

Linux

需要安装 libx11-dev/libX11-devellibpng-dev/libpng-devel 软件包。

线程安全

并非所有操作系统剪切板 API 都是线程安全的,因此虽然此包中的函数通过使用内部互斥锁进行同步来尽可能地实现线程安全,但使用其他剪切板库或直接调用操作系统剪切板 API 可能会导致未定义的行为。

示例

读取数据

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");
    }
}

写入文本

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

写入图像

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

let clipboard_image = clipboard.read().unwrap();
assert_eq!(clipboard_image.into_image().unwrap().as_raw(), image.as_ref());

依赖

~2–7.5MB
~60K SLoC