diff --git a/Cargo.toml b/Cargo.toml index 32e2afc..f2b4571 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,9 @@ name = "clippyboard-daemon" [[bin]] name = "clippyboard-select" +[[bin]] +name = "clippyboard-clear" + [dependencies] ciborium = "0.2.2" ctrlc = "3.5.0" @@ -22,3 +25,6 @@ tracing = { version = "0.1.41", features = ["attributes"] } tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } wayland-client = "0.31.11" wayland-protocols = { version = "0.32.9", features = ["staging"] } + +[profile.release] +lto = "thin" diff --git a/default.nix b/default.nix index ecfed20..4427abb 100644 --- a/default.nix +++ b/default.nix @@ -25,6 +25,8 @@ --suffix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath buildInputs} wrapProgram $out/bin/clippyboard-daemon \ --suffix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath buildInputs} + wrapProgram $out/bin/clippyboard-clear \ + --suffix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath buildInputs} ''; cargoLock.lockFile = ./Cargo.lock; diff --git a/src/bin/clippyboard-clear.rs b/src/bin/clippyboard-clear.rs new file mode 100644 index 0000000..9f34408 --- /dev/null +++ b/src/bin/clippyboard-clear.rs @@ -0,0 +1,19 @@ +use std::{io::Write, os::unix::net::UnixStream}; + +use eyre::Context; + +fn main() -> eyre::Result<()> { + let socket_path = clippyboard::socket_path()?; + + let mut socket = UnixStream::connect(&socket_path).wrap_err_with(|| { + format!( + "connecting to socket at {}. is the daemon running?", + socket_path.display() + ) + })?; + socket + .write_all(&[clippyboard::MESSAGE_CLEAR]) + .wrap_err("writing clear message to socket")?; + + Ok(()) +} diff --git a/src/daemon.rs b/src/daemon.rs index cd972dd..917a9d4 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -375,6 +375,10 @@ fn handle_peer(mut peer: UnixStream, shared_state: &SharedState) -> eyre::Result super::MESSAGE_COPY => { handle_copy_message(peer, shared_state).wrap_err("handling copy message")?; } + super::MESSAGE_CLEAR => { + shared_state.items.lock().unwrap().clear(); + info!("Cleared history"); + } _ => {} }; Ok(()) diff --git a/src/lib.rs b/src/lib.rs index 7274e49..d4f4ae0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -29,9 +29,10 @@ fn serialize_data(data: &Arc<[u8]>, serializer: S) -> Result eyre::Result { if let Some(path) = std::env::var_os("CLIPPYBOARD_SOCKET") {