use std::io::Write;
pub fn yank_status(text: &str, lines: usize) -> String {
if copy_to_clipboard(text) {
match lines {
1 => "1 line yanked".to_string(),
n => format!("{n} lines yanked"),
}
} else {
"clipboard unavailable".to_string()
}
}
pub fn copy_to_clipboard(text: &str) -> bool {
let (cmd, args): (&str, &[&str]) = if cfg!(target_os = "macos") {
("pbcopy", &[])
} else {
("xclip", &["-selection", "clipboard"])
};
let Ok(mut child) = std::process::Command::new(cmd)
.args(args)
.stdin(std::process::Stdio::piped())
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.spawn()
else {
return false;
};
let Some(mut stdin) = child.stdin.take() else {
return false;
};
if stdin.write_all(text.as_bytes()).is_err() {
return false;
}
drop(stdin); matches!(child.wait(), Ok(status) if status.success())
}