Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2024
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.34 KB | Source Code | 0 0
  1. use arboard::Clipboard;
  2.  
  3. #[derive(Debug, thiserror::Error)]
  4. enum Error {
  5.     #[error("Failed to write to file: {0}")]
  6.     Io(#[from] std::io::Error),
  7.     #[error("Failed to get clipboard text: {0}")]
  8.     Clipboard(#[from] arboard::Error),
  9. }
  10.  
  11. pub fn main() {
  12.     let mut clipboard = Clipboard::new().unwrap();
  13.     let mut last_content = String::new();
  14.  
  15.     loop {
  16.         if let Err(e) = check_clipboard(&mut clipboard, &mut last_content) {
  17.             println!("{}", e);
  18.         }
  19.         std::thread::sleep(std::time::Duration::from_millis(500));
  20.     }
  21. }
  22.  
  23. fn check_clipboard(clipboard: &mut Clipboard, last_content: &mut String) -> Result<(), Error> {
  24.     let current_content = clipboard.get_text()?;
  25.     if &current_content != last_content {
  26.         println!("Clipboard text changed: {}", current_content);
  27.  
  28.         // extract file path from copied text
  29.         if let Some(file_path) = current_content
  30.             // split into lines
  31.             .lines()
  32.             // get the first line
  33.             .next()
  34.             // check it starts with "// " and strip it
  35.             .and_then(|l| l.strip_prefix("// "))
  36.         {
  37.             std::fs::write(file_path.trim(), &current_content)?;
  38.             println!("Successfully wrote to {}", &current_content);
  39.         };
  40.         *last_content = current_content;
  41.     }
  42.     Ok(())
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement