#clipboard #winapi #notifications #windows #linux-macos

clipboard-master

Simple utility crate to monitor clipboard changes

12 releases (6 stable)

4.0.0-beta.6 Jun 4, 2024
4.0.0-beta.5 Feb 6, 2024
4.0.0-beta.4 Jan 17, 2024
3.1.3 Nov 23, 2021
0.1.0 Mar 17, 2017

#223 in Unix APIs

Download history 37/week @ 2024-11-17 145/week @ 2024-11-24 120/week @ 2024-12-01 181/week @ 2024-12-08 141/week @ 2024-12-15 114/week @ 2024-12-22 74/week @ 2024-12-29 172/week @ 2025-01-05 106/week @ 2025-01-12 102/week @ 2025-01-19 87/week @ 2025-01-26 105/week @ 2025-02-02 160/week @ 2025-02-09 84/week @ 2025-02-16 120/week @ 2025-02-23 59/week @ 2025-03-02

441 downloads per month
Used in clip_tex

MIT license

23KB
401 lines

clipboard-master

Crates.io Docs.rs

Clipboard monitoring library.

Supported platforms

  • Windows - uses dummy window to receive messages when clipboard changes;
  • Linux - uses x11_clipboard
  • MacOS - uses polling via NSPasteboard::changeCount as there is no event notification.

Clipboard Master Library

This project exports Master struct that provides simple way to handle clipboard updates.

Example:

extern crate clipboard_master;

use clipboard_master::{Master, ClipboardHandler, CallbackResult};

use std::io;

struct Handler;

impl ClipboardHandler for Handler {
    fn on_clipboard_change(&mut self) -> CallbackResult {
        println!("Clipboard change happened!");
        CallbackResult::Next
    }

    fn on_clipboard_error(&mut self, error: io::Error) -> CallbackResult {
        eprintln!("Error: {}", error);
        CallbackResult::Next
    }
}

fn main() {
    let mut master = Master::new(Handler).expect("create new monitor");

    let shutdown = master.shutdown_channel();
    std::thread::spawn(move || {
        std::thread::sleep(core::time::Duration::from_secs(1));
        println!("I did some work so time to finish...");
        shutdown.signal();
    });
    //Working until shutdown
    master.run().expect("Success");
}

Dependencies

~0–10MB
~117K SLoC