12个版本 (破坏性)
0.9.0 | 2024年6月19日 |
---|---|
0.8.1 | 2024年3月7日 |
0.8.0 | 2023年10月3日 |
0.7.0 | 2022年9月24日 |
0.2.0 | 2019年2月17日 |
#34 在 操作系统 中
每月76,380 次下载
用于 87 个crate(14个直接使用)
125KB
2.5K SLoC
wl-clipboard-rs
一个用于与Wayland剪贴板一起工作的安全Rust包。
此包旨在由终端应用程序、剪贴板管理器和其他不创建Wayland表面(窗口)的实用程序使用。如果您的应用程序有窗口,请使用适当的Wayland协议与Wayland剪贴板进行交互(来自核心Wayland协议的wl_data_device
,用于主选择的primary_selection
协议),例如通过smithay-clipboard crate。
用于剪贴板交互的协议是来自wlroots的data-control
。当使用常规剪贴板时,合成器必须支持协议的第一版。当使用“主”剪贴板时,合成器必须支持协议的第二版(或更高版)。
例如,使用这些功能的示例应用程序请参阅wl-clipboard-rs-tools/src/bin/wl_copy.rs
和wl-clipboard-rs-tools/src/bin/wl_paste.rs,它们实现了类似于wl-clipboard的终端应用程序,或者
wl-clipboard-rs-tools/src/bin/wl_clip.rs
,它实现了xclip
的Wayland版本。
默认情况下使用Rust客户端的实现;使用native_lib
功能将libwayland-client.so
链接到用于通信。还提供了一个dlopen
功能,用于在运行时动态加载而不是链接到libwayland-client.so
。
包本身的代码(以及示例实用程序的代码)是100%安全Rust。不包括依赖项。
示例
复制到常规剪贴板
use wl_clipboard_rs::copy::{MimeType, Options, Source};
let opts = Options::new();
opts.copy(Source::Bytes("Hello world!".to_string().into_bytes().into()), MimeType::Autodetect)?;
从常规剪贴板粘贴纯文本
use std::io::Read;
use wl_clipboard_rs::{paste::{get_contents, ClipboardType, Error, MimeType, Seat}};
let result = get_contents(ClipboardType::Regular, Seat::Unspecified, MimeType::Text);
match result {
Ok((mut pipe, _)) => {
let mut contents = vec![];
pipe.read_to_end(&mut contents)?;
println!("Pasted: {}", String::from_utf8_lossy(&contents));
}
Err(Error::NoSeats) | Err(Error::ClipboardEmpty) | Err(Error::NoMimeType) => {
// The clipboard is empty or doesn't contain text, nothing to worry about.
}
Err(err) => Err(err)?
}
检查是否支持“主要”剪贴板(注意,这可能取决于你的crate使用情况,常规的复制和粘贴函数在请求时会报告主要选择是否不受支持)
use wl_clipboard_rs::utils::{is_primary_selection_supported, PrimarySelectionCheckError};
match is_primary_selection_supported() {
Ok(supported) => {
// We have our definitive result. False means that either data-control version 1
// is present (which does not support the primary selection), or that data-control
// version 2 is present and it did not signal the primary selection support.
},
Err(PrimarySelectionCheckError::NoSeats) => {
// Impossible to give a definitive result. Primary selection may or may not be
// supported.
// The required protocol (data-control version 2) is there, but there are no seats.
// Unfortunately, at least one seat is needed to check for the primary clipboard
// support.
},
Err(PrimarySelectionCheckError::MissingProtocol { .. }) => {
// The data-control protocol (required for wl-clipboard-rs operation) is not
// supported by the compositor.
},
Err(_) => {
// Some communication error occurred.
}
}
包含的终端实用程序
wl-paste
:实现了来自wl-clipboard的wl-paste
。wl-copy
:实现了来自wl-clipboard的wl-copy
。wl-clip
:是xclip
的Wayland版本。
想要添加的功能
- 模仿
xsel
命令行标志的实用程序。
许可证:MIT/Apache-2.0
依赖项
~7–16MB
~215K SLoC