Compare commits

..

3 Commits

Author SHA1 Message Date
Moridius 2fc94ce2b7 Added an option to press Enter after typing. 2020-09-10 08:05:17 +02:00
Moridius ecf967e3f5 Some refactoring. 2020-09-10 08:01:43 +02:00
Moridius 17086e7da6 Fixed a problem with argument recognition. 2020-09-10 07:51:01 +02:00
3 changed files with 33 additions and 21 deletions

2
Cargo.lock generated
View File

@ -14,7 +14,7 @@ checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
[[package]]
name = "blinddate"
version = "0.2.0"
version = "0.3.0"
dependencies = [
"chrono",
"enigo",

View File

@ -1,11 +1,9 @@
[package]
name = "blinddate"
version = "0.2.0"
version = "0.3.0"
authors = ["Moridius <moridius-github@posteo.hu>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
chrono = "0.4.9"
enigo = "0.0.13"
chrono = "0.4"
enigo = "0.0"

View File

@ -13,18 +13,18 @@ fn command_to_date(command: &str) -> Result<Date<Local>, ()> {
}
fn calc_date(command: &str, today: Date<Local>) -> Result<Date<Local>, ()> {
let wday = today.weekday().num_days_from_monday() as i64;
if command == "today" {
return Ok(today);
let offset = if command == "today" {
Ok(0)
} else if command == "tomorrow" {
return Ok(today + Duration::days(1));
Ok(1)
} else if command == "yesterday" {
return Ok(today - Duration::days(1));
Ok(-1)
} else if command == "daybeforeyesterday" {
return Ok(today - Duration::days(2));
Ok(-2)
} else if command == "dayaftertomorrow" {
return Ok(today + Duration::days(2));
Ok(2)
} else if command.starts_with("next") || command.starts_with("last") {
let wday = today.weekday().num_days_from_monday() as i64;
let target = match &command[4..] {
"monday" => Ok(0),
"tuesday" => Ok(1),
@ -38,17 +38,24 @@ fn calc_date(command: &str, today: Date<Local>) -> Result<Date<Local>, ()> {
if let Ok(target) = target {
if command.starts_with("next") {
let offset = (target - wday + 7 - 1) % 7 + 1;
Ok((target - wday + 7 - 1) % 7 + 1)
} else {
Ok(-((wday - target + 7 - 1) % 7 + 1))
}
} else {
Err(())
}
} else {
return Err(());
};
if let Ok(offset) = offset {
return Ok(today + Duration::days(offset));
}
let offset = (wday - target + 7 - 1) % 7 + 1;
return Ok(today - Duration::days(offset));
}
};
Err(())
}
fn type_date(date: Date<Local>, alt_tab: bool) {
fn type_date(date: Date<Local>, alt_tab: bool, enter: bool) {
let date_str = format!("{}", date.format("%Y-%m-%d"));
let mut enigo = Enigo::new();
if alt_tab {
@ -57,19 +64,26 @@ fn type_date(date: Date<Local>, alt_tab: bool) {
enigo.key_up(Key::Alt);
thread::sleep(time::Duration::from_millis(100));
}
for c in date_str.chars() {
enigo.key_click(Key::Layout(c));
}
// enigo.key_click(Key::Return);
if enter {
enigo.key_click(Key::Return);
}
}
fn main() {
let mut command = String::new();
let mut alt_tab = false;
let mut enter = false;
for arg in env::args() {
for arg in env::args().skip(1) {
if arg == "--tab" {
alt_tab = true;
} else if arg == "--enter" {
enter = true;
} else {
command = arg.to_lowercase();
break;
@ -77,7 +91,7 @@ fn main() {
}
if let Ok(date) = command_to_date(&command) {
type_date(date, alt_tab);
type_date(date, alt_tab, enter);
} else {
eprintln!("blinddate");
eprintln!("Calculates a date and types it. Use with a shell script to enter dates into files rapidly.");