add linux target_os

pull/17/head
Takayuki Maeda 3 years ago
parent faf5ce1cb6
commit 4e3359b4b5

@ -1,23 +1,27 @@
#[cfg(any(test, not(any(feature = "x11", target_os = "macos", windows))))]
#[cfg(any(test, not(any(target_os = "linux", target_os = "macos", windows))))]
use copypasta::nop_clipboard::NopClipboardContext;
#[cfg(any(target_os = "macos", windows))]
#[cfg(target_os = "linux")]
use copypasta::x11_clipboard::{Primary as X11SelectionClipboard, X11ClipboardContext};
#[cfg(any(target_os = "linux", target_os = "macos", windows))]
use copypasta::ClipboardContext;
use copypasta::ClipboardProvider;
pub struct Clipboard {
clipboard: Box<dyn ClipboardProvider>,
selection: Option<Box<dyn ClipboardProvider>>,
}
impl Clipboard {
#[cfg(any(target_os = "macos", windows))]
#[cfg(any(target_os = "linux", target_os = "macos", windows))]
pub fn new() -> Self {
Self::default()
}
#[cfg(any(test, not(any(target_os = "macos", windows))))]
#[cfg(any(test, not(any(target_os = "linux", target_os = "macos", windows))))]
pub fn new_nop() -> Self {
Self {
clipboard: Box::new(NopClipboardContext::new().unwrap()),
selection: None,
}
}
}
@ -27,24 +31,41 @@ impl Default for Clipboard {
#[cfg(any(target_os = "macos", windows))]
return Self {
clipboard: Box::new(ClipboardContext::new().unwrap()),
selection: None,
};
#[cfg(not(any(target_os = "macos", windows)))]
#[cfg(target_os = "linux")]
return Self {
clipboard: Box::new(ClipboardContext::new().unwrap()),
selection: Some(Box::new(
X11ClipboardContext::<X11SelectionClipboard>::new().unwrap(),
)),
};
#[cfg(not(any(target_os = "linux", target_os = "macos", windows)))]
return Self::new_nop();
}
}
impl Clipboard {
pub fn store(&mut self, text: impl Into<String>) {
self.clipboard
.set_contents(text.into())
.unwrap_or_else(|err| {
panic!("Unable to store text in clipboard: {}", err);
});
let clipboard = match &mut self.selection {
Some(provider) => provider,
None => &mut self.clipboard,
};
clipboard.set_contents(text.into()).unwrap_or_else(|err| {
panic!("Unable to store text in clipboard: {}", err);
});
}
pub fn _load(&mut self) -> String {
match self.clipboard.get_contents() {
let clipboard = match &mut self.selection {
Some(provider) => provider,
None => &mut self.clipboard,
};
match clipboard.get_contents() {
Err(err) => {
panic!("Unable to load text from clipboard: {}", err);
}

Loading…
Cancel
Save