diff options
author | Orhun Parmaksız <orhunparmaksiz@gmail.com> | 2022-09-29 22:57:50 +0200 |
---|---|---|
committer | Orhun Parmaksız <orhunparmaksiz@gmail.com> | 2022-09-29 22:57:50 +0200 |
commit | ce553d6200ebfc0f53605e7740432a95d710fc06 (patch) | |
tree | 60f4b60a00622c1d6e1cf190df50a025aa47c31f | |
parent | 066ec33a69f378e7111d17b9908b0f5729be7cb1 (diff) |
refactor: Switch to copypasta-ext for fixing RUSTSEC-2022-0056
closes #33
-rw-r--r-- | Cargo.lock | 308 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | src/app.rs | 32 | ||||
-rw-r--r-- | src/main.rs | 9 |
5 files changed, 318 insertions, 34 deletions
@@ -14,6 +14,12 @@ dependencies = [ ] [[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -66,32 +72,67 @@ dependencies = [ ] [[package]] -name = "clipboard" -version = "0.5.0" +name = "clipboard-win" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a904646c0340239dcf7c51677b33928bf24fdf424b79a57909c0109075b2e7" +checksum = "9fdf5e01086b6be750428ba4a40619f847eb2e95756eee84b18e06e5f0b50342" +dependencies = [ + "lazy-bytes-cast", + "winapi", +] + +[[package]] +name = "colorsys" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c2ad453c82bd637e3969dc52f06676610db0b20c607bf0634c7e9d840789e8" + +[[package]] +name = "copypasta" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7216b5c1e9ad3867252505995b02d01c6fa7e6db0d8abd42634352ef377777e" dependencies = [ "clipboard-win", "objc", "objc-foundation", "objc_id", + "smithay-clipboard", "x11-clipboard", ] [[package]] -name = "clipboard-win" -version = "2.2.0" +name = "copypasta-ext" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b" +checksum = "af4c1c3f959cd8047b935d503c30e8bdfc9f7539493962ec3e45b9f0d305cbcc" dependencies = [ - "winapi", + "copypasta", + "libc", + "which", + "x11-clipboard", ] [[package]] -name = "colorsys" -version = "0.6.6" +name = "dlib" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2ad453c82bd637e3969dc52f06676610db0b20c607bf0634c7e9d840789e8" +checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" +dependencies = [ + "libloading", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "enum-iterator" @@ -128,8 +169,8 @@ version = "1.6.0" dependencies = [ "bytesize", "clap", - "clipboard", "colorsys", + "copypasta-ext", "enum-iterator", "termion", "tui", @@ -137,12 +178,34 @@ dependencies = [ ] [[package]] +name = "lazy-bytes-cast" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10257499f089cd156ad82d0a9cd57d9501fa2c989068992a97eb3c27836f206b" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] name = "libc" version = "0.2.134" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb" [[package]] +name = "libloading" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] name = "log" version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -161,6 +224,58 @@ dependencies = [ ] [[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memmap2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95af15f345b17af2efc8ead6080fb8bc376f8cec1b35277b935637595fe77498" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nix" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "memoffset", +] + +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] name = "numtoa" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -196,12 +311,24 @@ dependencies = [ ] [[package]] +name = "once_cell" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" + +[[package]] name = "os_str_bytes" version = "6.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" [[package]] +name = "pkg-config" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" + +[[package]] name = "proc-macro2" version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -211,6 +338,15 @@ dependencies = [ ] [[package]] +name = "quick-xml" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8533f14c8382aaad0d592c812ac3b826162128b65662331e1127b45c3d18536b" +dependencies = [ + "memchr", +] + +[[package]] name = "quote" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -238,6 +374,46 @@ dependencies = [ ] [[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "smallvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" + +[[package]] +name = "smithay-client-toolkit" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" +dependencies = [ + "bitflags", + "dlib", + "lazy_static", + "log", + "memmap2", + "nix", + "pkg-config", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + +[[package]] +name = "smithay-clipboard" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" +dependencies = [ + "smithay-client-toolkit", + "wayland-client", +] + +[[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -307,6 +483,90 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] +name = "wayland-client" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" +dependencies = [ + "bitflags", + "downcast-rs", + "libc", + "nix", + "scoped-tls", + "wayland-commons", + "wayland-scanner", + "wayland-sys", +] + +[[package]] +name = "wayland-commons" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" +dependencies = [ + "nix", + "once_cell", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-cursor" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" +dependencies = [ + "nix", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" +dependencies = [ + "bitflags", + "wayland-client", + "wayland-commons", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "wayland-sys" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" +dependencies = [ + "dlib", + "lazy_static", + "pkg-config", +] + +[[package]] +name = "which" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" +dependencies = [ + "either", + "libc", + "once_cell", +] + +[[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -339,19 +599,35 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "x11-clipboard" -version = "0.3.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89bd49c06c9eb5d98e6ba6536cf64ac9f7ee3a009b2f53996d405b3944f6bcea" +checksum = "6a7468a5768fea473e6c8c0d4b60d6d7001a64acceaac267207ca0281e1337e8" dependencies = [ "xcb", ] [[package]] name = "xcb" -version = "0.8.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de" +checksum = "b127bf5bfe9dbb39118d6567e3773d4bbc795411a8e1ef7b7e056bccac0011a9" dependencies = [ + "bitflags", "libc", - "log", + "quick-xml", +] + +[[package]] +name = "xcursor" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" +dependencies = [ + "nom", ] + +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" @@ -18,10 +18,10 @@ tui = { version = "0.19.0", default-features = false, features = ["termion"] } termion = "1.5.6" bytesize = "1.1.0" unicode-width = "0.1.10" -clipboard = "0.5.0" colorsys = "0.6.6" enum-iterator = "1.2.0" clap = "4.0.4" +copypasta-ext = "0.3.9" [profile.dev] opt-level = 0 @@ -222,7 +222,6 @@ man kmon #### Note [libxcb](https://xcb.freedesktop.org/) should be installed for using the copy/paste commands of X11. -[*](https://github.com/aweinstock314/rust-clipboard/issues/67) e.g: Install `libxcb1-dev` package for Debian/Ubuntu[*](https://github.com/orhun/kmon/issues/2) and `libxcb-devel` package for Fedora/openSUSE/Void Linux. @@ -6,9 +6,9 @@ use crate::kernel::Kernel; use crate::style::{Style, StyledText, Symbol}; use crate::util; use crate::widgets::StatefulList; -use clipboard::{ClipboardContext, ClipboardProvider}; +use copypasta_ext::display::DisplayServer as ClipboardDisplayServer; +use copypasta_ext::prelude::ClipboardProvider; use enum_iterator::Sequence; -use std::error::Error; use std::fmt::{Debug, Display, Formatter}; use std::slice::Iter; use std::sync::mpsc::Sender; @@ -140,6 +140,7 @@ pub struct App { pub options: StatefulList<(String, String)>, pub show_options: bool, style: Style, + clipboard: Option<Box<dyn ClipboardProvider>>, } impl App { @@ -168,6 +169,13 @@ impl App { ), show_options: false, style, + clipboard: match ClipboardDisplayServer::select().try_context() { + None => { + eprintln!("failed to initialize clipboard, no suitable clipboard provider found"); + None + } + clipboard => clipboard, + }, } } @@ -216,13 +224,13 @@ impl App { * * @return contents */ - pub fn get_clipboard_contents(&self) -> String { - let clipboard_context: Result<ClipboardContext, Box<dyn Error>> = - ClipboardProvider::new(); - match clipboard_context { - Ok(mut v) => v.get_contents().unwrap_or_default(), - Err(_) => String::new(), + pub fn get_clipboard_contents(&mut self) -> String { + if let Some(clipboard) = self.clipboard.as_mut() { + if let Ok(contents) = clipboard.get_contents() { + return contents; + } } + String::new() } /** @@ -230,11 +238,9 @@ impl App { * * @param contents */ - pub fn set_clipboard_contents(&self, contents: &str) { - let clipboard_context: Result<ClipboardContext, Box<dyn Error>> = - ClipboardProvider::new(); - if let Ok(mut v) = clipboard_context { - v.set_contents(contents.to_string()).unwrap(); + pub fn set_clipboard_contents(&mut self, contents: &str) { + if let Some(clipboard) = self.clipboard.as_mut() { + clipboard.set_contents(contents.to_string()).unwrap(); } } diff --git a/src/main.rs b/src/main.rs index 2ec33a1..45043f9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -364,7 +364,8 @@ where } /* Paste the clipboard contents and switch to search mode. */ Key::Char('v') | Key::Ctrl('V') | Key::Ctrl('v') => { - app.input_query += &app.get_clipboard_contents(); + let clipboard_contents = app.get_clipboard_contents(); + app.input_query += &clipboard_contents; events.tx.send(Event::Input(Key::Char('\n'))).unwrap(); kernel.modules.index = 0; } @@ -468,11 +469,13 @@ where } /* Copy input query to the clipboard. */ Key::Ctrl('c') => { - app.set_clipboard_contents(&app.input_query); + let query = app.input_query.clone(); + app.set_clipboard_contents(&query); } /* Paste the clipboard contents. */ Key::Ctrl('v') => { - app.input_query += &app.get_clipboard_contents(); + let clipboard_contents = app.get_clipboard_contents(); + app.input_query += &clipboard_contents; } /* Exit user input mode. */ Key::Char('\n') |