From 6f70194871d385a0887a8c9638ba09099f78c0f5 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 24 May 2021 12:21:57 +0200 Subject: [PATCH] new features --- Cargo.lock | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 4 +- src/config.rs | 39 +++++++++++++++ src/main.rs | 27 +++++++++- 4 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 src/config.rs diff --git a/Cargo.lock b/Cargo.lock index be9adab..42dd344 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,12 +2,65 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + [[package]] name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +[[package]] +name = "cc" +version = "1.0.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + [[package]] name = "clipboard_macos" version = "0.1.0" @@ -23,7 +76,28 @@ dependencies = [ name = "clipwatch" version = "0.1.0" dependencies = [ + "clap", "clipboard_macos", + "ctrlc", +] + +[[package]] +name = "ctrlc" +version = "3.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232295399409a8b7ae41276757b5a1cc21032848d42bff2352261f958b3ca29a" +dependencies = [ + "nix", + "winapi", +] + +[[package]] +name = "hermit-abi" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +dependencies = [ + "libc", ] [[package]] @@ -41,6 +115,18 @@ dependencies = [ "libc", ] +[[package]] +name = "nix" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" +dependencies = [ + "bitflags", + "cc", + "cfg-if", + "libc", +] + [[package]] name = "objc" version = "0.2.7" @@ -69,3 +155,52 @@ checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" dependencies = [ "objc", ] + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index 0850647..7912605 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,4 +5,6 @@ authors = ["JMARyA "] edition = "2018" [dependencies] -clipboard_macos = "0.1.0" \ No newline at end of file +clipboard_macos = "0.1.0" +clap = "2.0" +ctrlc = "3.1.9" \ No newline at end of file diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..38c98ae --- /dev/null +++ b/src/config.rs @@ -0,0 +1,39 @@ +use clap::{App, Arg}; + +pub fn parse_config() -> Config { + let args = App::new("Clipwatch") + .version(option_env!("CARGO_PKG_VERSION").unwrap()) + .author("JMARyA ") + .about("Keep an eye on the clipboard") + .arg( + Arg::with_name("ignore-first") + .short("i") + .long("ignore-first") + .help("ignores the value stored in the clipboard at the start of the programm") + .takes_value(false), + ) + .arg( + Arg::with_name("summary") + .short("s") + .long("summary") + .help("at termination of the programm a summary will be copied into the clipboard") + .takes_value(false), + ) + .get_matches(); + return Config::new(args); +} + +#[derive(Debug)] +pub struct Config { + pub ignore_first: bool, + pub summary: bool, +} + +impl Config { + fn new(args: clap::ArgMatches) -> Config { + return Config { + ignore_first: args.is_present("ignore-first"), + summary: args.is_present("summary"), + }; + } +} diff --git a/src/main.rs b/src/main.rs index a8bf76b..8c2f6a6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,34 @@ +mod config; use clipboard_macos::*; -use std::{thread, time}; +use std::sync::{Arc, Mutex}; +use std::{process, thread, time}; fn main() { + let conf = config::parse_config(); + let c = Clipboard::new().unwrap(); let mut cstr = String::new(); let ten_millis = time::Duration::from_millis(10); + let stream: Arc>> = Arc::new(Mutex::new(vec![])); + let cp_stream = stream.clone(); + + let summary = conf.summary.clone(); + ctrlc::set_handler(move || { + if summary { + let mut fstr = String::new(); + let v = cp_stream.lock().unwrap(); + for i in 0..v.len() { + fstr.push_str(&*format!("{}\n", v[i])); + } + Clipboard::new().unwrap().write(fstr); + } + process::exit(0); + }) + .expect("Error setting Ctrl-C handler"); + + if conf.ignore_first { + cstr = c.read().unwrap(); + } loop { let nstr = c.read(); @@ -13,6 +37,7 @@ fn main() { } let nstr = nstr.unwrap(); if nstr != cstr { + stream.lock().unwrap().push(nstr.clone()); println!("{}", nstr); cstr = nstr; }