[![Build status on GitLab CI][gitlab-ci-master-badge]][gitlab-ci-link] [![Newest release on crates.io][crate-version-badge]][crate-link] [![Documentation][docs-badge]][docs] [![Number of downloads on crates.io][crate-download-badge]][crate-link] [![Project license][crate-license-badge]](#License) [crate-download-badge]: https://img.shields.io/crates/d/copypasta-ext.svg [crate-license-badge]: https://img.shields.io/crates/l/copypasta-ext.svg [crate-link]: https://crates.io/crates/copypasta-ext [crate-version-badge]: https://img.shields.io/crates/v/copypasta-ext.svg [docs-badge]: https://docs.rs/copypasta-ext/badge.svg [docs]: https://docs.rs/copypasta-ext [gitlab-ci-link]: https://gitlab.com/timvisee/copypasta-ext/pipelines [gitlab-ci-master-badge]: https://gitlab.com/timvisee/copypasta-ext/badges/master/pipeline.svg # copypasta-ext A clipboard library providing useful extensions for the [`copypasta`][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`](https://docs.rs/copypasta-ext/*/copypasta_ext/x11_fork/index.html): forks process and sets clipboard, keeps contents after exit - [`X11BinClipboardProvider`](https://docs.rs/copypasta-ext/*/copypasta_ext/x11_bin/index.html): invokes `xclip`/`xsel` to set clipboard, keeps contents after exit - [`Osc52ClipboardContext`](https://docs.rs/copypasta-ext/*/copypasta_ext/osc52/index.html): use OSC 52 escape sequence to set clipboard contents - [`CombinedClipboardProvider`](https://docs.rs/copypasta-ext/*/copypasta_ext/struct.CombinedClipboardContext.html): combine two providers, use different for getting/setting clipboard To guess at runtime what clipboard provider is best used see the [`DisplayServer`](https://docs.rs/copypasta-ext/*/copypasta_ext/display/enum.DisplayServer.html) 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`][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`](https://docs.rs/copypasta-ext/*/copypasta_ext/x11_fork/index.html) module for details. ```rust 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`](https://docs.rs/copypasta-ext/*/copypasta_ext/x11_bin/index.html) module for details. ```rust 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`][copypasta] - Requirements noted in specific clipboard context modules ## Special thanks - to the maintainers/contributors of [`rust-clipboard`][rust-clipboard] and [`copypasta`][copypasta] - to everyone involved in all crate dependencies used ## License This project is dual-licensed under the [MIT](./LICENSE.mit) and [Apache2](./LICENSE.apache2) license. [copypasta]: https://github.com/alacritty/copypasta [rust-clipboard]: https://github.com/aweinstock314/rust-clipboard