aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirawi2021-06-30 08:11:56 +0000
committerGitHub2021-06-30 08:11:56 +0000
commitacaf22d00548c39c5bc86eea58cf523508a9c3b6 (patch)
treee36ddb2558c8c5cb95afa68d5e747ee52848b658
parentb39e452d7714a74419e02195183a659ae4efb1f6 (diff)
Added native Windows clipboard support (#373)
* Added native Windows clipboard support * make conditional wip better conditional wip wip wip wip make conditional
-rw-r--r--Cargo.lock28
-rw-r--r--helix-view/Cargo.toml3
-rw-r--r--helix-view/src/clipboard.rs27
3 files changed, 57 insertions, 1 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 5dc6c44a..473ae8c8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -101,6 +101,17 @@ dependencies = [
]
[[package]]
+name = "clipboard-win"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e4ea1881992efc993e4dc50a324cdbd03216e41bdc8385720ff47efc9bd2ca8"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
name = "crossbeam-utils"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -173,6 +184,16 @@ dependencies = [
]
[[package]]
+name = "error-code"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5115567ac25674e0043e472be13d14e537f37ea8aa4bdc4aef0c89add1db1ff"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
name = "etcetera"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -383,6 +404,7 @@ dependencies = [
"anyhow",
"bitflags",
"chardetng",
+ "clipboard-win",
"crossterm",
"encoding_rs",
"futures-util",
@@ -872,6 +894,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
[[package]]
+name = "str-buf"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a"
+
+[[package]]
name = "syn"
version = "1.0.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/helix-view/Cargo.toml b/helix-view/Cargo.toml
index b4379952..cb2032de 100644
--- a/helix-view/Cargo.toml
+++ b/helix-view/Cargo.toml
@@ -38,5 +38,8 @@ log = "~0.4"
which = "4.1"
+[target.'cfg(windows)'.dependencies]
+clipboard-win = { version = "4.2", features = ["std"] }
+
[dev-dependencies]
helix-tui = { path = "../helix-tui" }
diff --git a/helix-view/src/clipboard.rs b/helix-view/src/clipboard.rs
index e32933e3..401c0459 100644
--- a/helix-view/src/clipboard.rs
+++ b/helix-view/src/clipboard.rs
@@ -77,7 +77,11 @@ pub fn get_clipboard_provider() -> Box<dyn ClipboardProvider> {
copy => "tmux", "load-buffer", "-";
}
} else {
- Box::new(provider::NopProvider)
+ #[cfg(target_os = "windows")]
+ return Box::new(provider::WindowsProvider);
+
+ #[cfg(not(target_os = "windows"))]
+ return Box::new(provider::NopProvider);
}
}
@@ -120,6 +124,27 @@ mod provider {
}
}
+ #[cfg(target_os = "windows")]
+ #[derive(Debug)]
+ pub struct WindowsProvider;
+
+ #[cfg(target_os = "windows")]
+ impl ClipboardProvider for WindowsProvider {
+ fn name(&self) -> Cow<str> {
+ Cow::Borrowed("clipboard-win")
+ }
+
+ fn get_contents(&self) -> Result<String> {
+ let contents = clipboard_win::get_clipboard(clipboard_win::formats::Unicode)?;
+ Ok(contents)
+ }
+
+ fn set_contents(&self, contents: String) -> Result<()> {
+ clipboard_win::set_clipboard(clipboard_win::formats::Unicode, contents)?;
+ Ok(())
+ }
+ }
+
#[derive(Debug)]
pub struct CommandConfig {
pub prg: &'static str,