From d017288de426f343043295dcec7170ad26b31021 Mon Sep 17 00:00:00 2001 From: jojii Date: Fri, 2 Apr 2021 20:20:09 +0200 Subject: [PATCH] add -k to open each kanji info in a browser tab --- Cargo.lock | 18 ++++++++++++++++ Cargo.toml | 3 +++ src/main.rs | 61 +++++++++++++++++++++++++++++------------------------ 3 files changed, 55 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 31a3c38..5dda0c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -112,6 +112,7 @@ dependencies = [ "colored", "serde_json", "ureq", + "webbrowser", ] [[package]] @@ -397,6 +398,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webbrowser" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecad156490d6b620308ed411cfee90d280b3cbd13e189ea0d3fada8acc89158a" +dependencies = [ + "web-sys", + "widestring", + "winapi", +] + [[package]] name = "webpki" version = "0.21.4" @@ -416,6 +428,12 @@ dependencies = [ "webpki", ] +[[package]] +name = "widestring" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 001b133..fcd2d24 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,3 +14,6 @@ serde_json = "1.0.64" ansi_term = "0.12.1" colored = "2.0.0" argparse = "0.2.2" +webbrowser = "0.5.5" + +[features] diff --git a/src/main.rs b/src/main.rs index 6f9e828..9faf341 100644 --- a/src/main.rs +++ b/src/main.rs @@ -46,36 +46,44 @@ fn main() -> Result<(), ureq::Error> { }; loop { - // Do API request - let body: Value = ureq::get(&format!(JISHO_URL!(), query)) - .call()? - .into_json()?; + if options.kanji { + // Open kanji page here + query.chars().into_iter().for_each(|kanji| { + webbrowser::open(&format!("https://jisho.org/search/{}%23kanji", kanji)) + .expect("Couldn't open browser"); + }); + } else { + // Do API request + let body: Value = ureq::get(&format!(JISHO_URL!(), query)) + .call()? + .into_json()?; - // Try to get the data json-object - let body = value_to_arr({ - let body = body.get("data"); + // Try to get the data json-object + let body = value_to_arr({ + let body = body.get("data"); - if body.is_none() { - eprintln!("Error! Invalid response"); - return Ok(()); - } + if body.is_none() { + eprintln!("Error! Invalid response"); + return Ok(()); + } - body.unwrap() - }); + body.unwrap() + }); - if options.interactive { - println!(); - } - - // Iterate over meanings and print them - for (i, entry) in body.iter().enumerate() { - if i >= options.limit { - break; - } - - if print_item(&query, entry).is_some() && i + 2 <= options.limit { + if options.interactive { println!(); } + + // Iterate over meanings and print them + for (i, entry) in body.iter().enumerate() { + if i >= options.limit { + break; + } + + if print_item(&query, entry).is_some() && i + 2 <= options.limit { + println!(); + } + } } if !options.interactive { @@ -268,13 +276,12 @@ fn parse_args() -> Options { "Don't exit after running a query", ); - /* Uncomment when supported by jisho.org + /* Uncomment when supported by jisho.org */ ap.refer(&mut options.kanji).add_option( &["--kanji", "-k"], - StoreFalse, + StoreTrue, "Look up a certain kanji", ); - */ ap.parse_args_or_exit(); }