10 releases
0.4.4 | Feb 23, 2023 |
---|---|
0.4.3 | Feb 20, 2023 |
0.4.1 | Jan 19, 2023 |
0.3.9 | Jun 18, 2022 |
0.3.0 | May 28, 2020 |
#121 in Unix APIs
8,188 downloads per month
Used in 25 crates
(20 directly)
52KB
723 lines
copypasta-ext
A clipboard library providing useful extensions for the
copypasta
library.
I had a growing annoyance with copypasta
, because the clipboard is
cleared on the Linux/X11 platform when your application exits as per X11
design. The crate maintainer didn't want to implement workarounds (for valid
reasons). This copypasta-ext
crate provides additional
clipboard contexts that solve this, along with a few other additions.
Here are some of these additions:
X11ForkClipboardProvider
: forks process and sets clipboard, keeps contents after exitX11BinClipboardProvider
: invokesxclip
/xsel
to set clipboard, keeps contents after exitOsc52ClipboardContext
: use OSC 52 escape sequence to set clipboard contentsCombinedClipboardProvider
: combine two providers, use different for getting/setting clipboard
To guess at runtime what clipboard provider is best used see the DisplayServer
class.
Enable all desired compiler feature flags for clipboard systems to support, and
use DisplayServer::select().try_context()
to obtain a clipboard context.
This crate should work with the latest copypasta
. Feel free to
open an issue or pull request otherwise. The copypasta
crate is exposed as
copypasta_ext::copypasta
.
Example
Get and set clipboard contents. Keeps contents in X11 clipboard after exit by
forking the process. Falls back to standard clipboard provider on non X11 platforms.
See x11_fork
module for details.
use copypasta_ext::prelude::*;
use copypasta_ext::x11_fork::ClipboardContext;
fn main() {
let mut ctx = ClipboardContext::new().unwrap();
println!("{:?}", ctx.get_contents());
ctx.set_contents("some string".into()).unwrap();
}
Get and set clipboard contents. Keeps contents in X11 clipboard after exit by
invoking xclip
/xsel
. Falls back to standard clipboard provider on non X11
platforms. See x11_bin
module for details.
use copypasta_ext::prelude::*;
use copypasta_ext::x11_bin::ClipboardContext;
fn main() {
let mut ctx = ClipboardContext::new().unwrap();
println!("{:?}", ctx.get_contents());
ctx.set_contents("some string".into()).unwrap();
}
Requirements
- Rust 1.60 or above (MSRV)
- Same requirements as
copypasta
- Requirements noted in specific clipboard context modules
Special thanks
- to the maintainers/contributors of
rust-clipboard
andcopypasta
- to everyone involved in all crate dependencies used
License
This project is dual-licensed under the MIT and Apache2 license.
Dependencies
~0–9.5MB
~107K SLoC