on master help sign in
Added native Windows clipboard support (#373)

* Added native Windows clipboard support * make conditional wip better conditional wip wip wip wip make conditional

commitacaf22d00548c39c5bc86eea58cf523508a9c3b6 authorKirawi <67773714+kirawi@users.noreply.github.com> dateWed 30 Jun 2021, 04:11 (5 years ago) parentb39e452
3 files changed+57−1
Cargo.lock+28 helix-view/Cargo.toml+3 helix-view/src/clipboard.rs+26−1
Cargo.lock+28
@@ -100,6 +100,17 @@ dependencies = [
100100 "winapi",
101101]
102102
103+[[package]]
104+name = "clipboard-win"
105+version = "4.2.1"
106+source = "registry+https://github.com/rust-lang/crates.io-index"
107+checksum = "4e4ea1881992efc993e4dc50a324cdbd03216e41bdc8385720ff47efc9bd2ca8"
108+dependencies = [
109+ "error-code",
110+ "str-buf",
111+ "winapi",
112+]
113+
103114[[package]]
104115name = "crossbeam-utils"
105116version = "0.8.5"
@@ -172,6 +183,16 @@ dependencies = [
172183 "cfg-if 1.0.0",
173184]
174185
186+[[package]]
187+name = "error-code"
188+version = "2.3.0"
189+source = "registry+https://github.com/rust-lang/crates.io-index"
190+checksum = "b5115567ac25674e0043e472be13d14e537f37ea8aa4bdc4aef0c89add1db1ff"
191+dependencies = [
192+ "libc",
193+ "str-buf",
194+]
195+
175196[[package]]
176197name = "etcetera"
177198version = "0.3.2"
@@ -383,6 +404,7 @@ dependencies = [
383404 "anyhow",
384405 "bitflags",
385406 "chardetng",
407+ "clipboard-win",
386408 "crossterm",
387409 "encoding_rs",
388410 "futures-util",
@@ -871,6 +893,12 @@ version = "1.6.1"
871893source = "registry+https://github.com/rust-lang/crates.io-index"
872894checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
873895
896+[[package]]
897+name = "str-buf"
898+version = "1.0.5"
899+source = "registry+https://github.com/rust-lang/crates.io-index"
900+checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a"
901+
874902[[package]]
875903name = "syn"
876904version = "1.0.73"
helix-view/Cargo.toml+3
@@ -38,5 +38,8 @@ log = "~0.4"
3838
3939which = "4.1"
4040
41+[target.'cfg(windows)'.dependencies]
42+clipboard-win = { version = "4.2", features = ["std"] }
43+
4144[dev-dependencies]
4245helix-tui = { path = "../helix-tui" }
helix-view/src/clipboard.rs+26−1
@@ -77,7 +77,11 @@ pub fn get_clipboard_provider() -> Box<dyn ClipboardProvider> {
7777 copy => "tmux", "load-buffer", "-";
7878 }
7979 } else {
80− Box::new(provider::NopProvider)
80+ #[cfg(target_os = "windows")]
81+ return Box::new(provider::WindowsProvider);
82+
83+ #[cfg(not(target_os = "windows"))]
84+ return Box::new(provider::NopProvider);
8185 }
8286}
8387
@@ -120,6 +124,27 @@ mod provider {
120124 }
121125 }
122126
127+ #[cfg(target_os = "windows")]
128+ #[derive(Debug)]
129+ pub struct WindowsProvider;
130+
131+ #[cfg(target_os = "windows")]
132+ impl ClipboardProvider for WindowsProvider {
133+ fn name(&self) -> Cow<str> {
134+ Cow::Borrowed("clipboard-win")
135+ }
136+
137+ fn get_contents(&self) -> Result<String> {
138+ let contents = clipboard_win::get_clipboard(clipboard_win::formats::Unicode)?;
139+ Ok(contents)
140+ }
141+
142+ fn set_contents(&self, contents: String) -> Result<()> {
143+ clipboard_win::set_clipboard(clipboard_win::formats::Unicode, contents)?;
144+ Ok(())
145+ }
146+ }
147+
123148 #[derive(Debug)]
124149 pub struct CommandConfig {
125150 pub prg: &'static str,