mirror of
https://github.com/nushell/nushell.git
synced 2024-11-07 09:04:18 +01:00
allow start to handle urls (#3351)
This commit is contained in:
parent
df2f3d25b0
commit
73f62266c6
49
Cargo.lock
generated
49
Cargo.lock
generated
@ -183,16 +183,6 @@ version = "0.5.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
|
checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "async-attributes"
|
|
||||||
version = "1.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5"
|
|
||||||
dependencies = [
|
|
||||||
"quote 1.0.9",
|
|
||||||
"syn 1.0.63",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-channel"
|
name = "async-channel"
|
||||||
version = "1.6.1"
|
version = "1.6.1"
|
||||||
@ -290,7 +280,6 @@ version = "1.9.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d9f06685bad74e0570f5213741bea82158279a4103d988e57bfada11ad230341"
|
checksum = "d9f06685bad74e0570f5213741bea82158279a4103d988e57bfada11ad230341"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-attributes",
|
|
||||||
"async-channel",
|
"async-channel",
|
||||||
"async-global-executor",
|
"async-global-executor",
|
||||||
"async-io",
|
"async-io",
|
||||||
@ -2394,18 +2383,6 @@ dependencies = [
|
|||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ichwh"
|
|
||||||
version = "0.3.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ea685d38f1becb4f0a04e6cbff9256c6c2cd5e5905563b251401d1c13d12c654"
|
|
||||||
dependencies = [
|
|
||||||
"async-std",
|
|
||||||
"cfg-if 0.1.10",
|
|
||||||
"futures 0.3.13",
|
|
||||||
"thiserror",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
@ -3176,7 +3153,6 @@ dependencies = [
|
|||||||
"glob",
|
"glob",
|
||||||
"htmlescape",
|
"htmlescape",
|
||||||
"ical",
|
"ical",
|
||||||
"ichwh",
|
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"itertools",
|
"itertools",
|
||||||
"lazy_static 1.4.0",
|
"lazy_static 1.4.0",
|
||||||
@ -3275,7 +3251,6 @@ dependencies = [
|
|||||||
"hamcrest2",
|
"hamcrest2",
|
||||||
"htmlescape",
|
"htmlescape",
|
||||||
"ical",
|
"ical",
|
||||||
"ichwh",
|
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"itertools",
|
"itertools",
|
||||||
"lazy_static 1.4.0",
|
"lazy_static 1.4.0",
|
||||||
@ -3758,6 +3733,7 @@ dependencies = [
|
|||||||
"nu-source",
|
"nu-source",
|
||||||
"open",
|
"open",
|
||||||
"url",
|
"url",
|
||||||
|
"webbrowser",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -6787,6 +6763,17 @@ dependencies = [
|
|||||||
"wasm-bindgen",
|
"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 0.3.9",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "weezl"
|
name = "weezl"
|
||||||
version = "0.1.4"
|
version = "0.1.4"
|
||||||
@ -6804,14 +6791,20 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "which"
|
name = "which"
|
||||||
version = "4.0.2"
|
version = "4.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef"
|
checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"either",
|
||||||
"libc",
|
"libc",
|
||||||
"thiserror",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "widestring"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wild"
|
name = "wild"
|
||||||
version = "2.0.4"
|
version = "2.0.4"
|
||||||
|
@ -17,6 +17,7 @@ nu-protocol = { path = "../nu-protocol", version = "0.30.1" }
|
|||||||
nu-source = { path = "../nu-source", version = "0.30.1" }
|
nu-source = { path = "../nu-source", version = "0.30.1" }
|
||||||
open = "1.4.0"
|
open = "1.4.0"
|
||||||
url = "2.2.0"
|
url = "2.2.0"
|
||||||
|
webbrowser = "0.5.5"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-errors = { version = "0.30.1", path = "../nu-errors" }
|
nu-errors = { version = "0.30.1", path = "../nu-errors" }
|
||||||
|
@ -2,7 +2,6 @@ use nu_errors::ShellError;
|
|||||||
use nu_protocol::{CallInfo, Value};
|
use nu_protocol::{CallInfo, Value};
|
||||||
use nu_source::{Tag, Tagged, TaggedItem};
|
use nu_source::{Tag, Tagged, TaggedItem};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
|
|
||||||
@ -24,7 +23,7 @@ impl Start {
|
|||||||
|
|
||||||
pub fn parse(&mut self, call_info: CallInfo) -> Result<(), ShellError> {
|
pub fn parse(&mut self, call_info: CallInfo) -> Result<(), ShellError> {
|
||||||
self.tag = call_info.name_tag.clone();
|
self.tag = call_info.name_tag.clone();
|
||||||
self.parse_filenames(&call_info)?;
|
self.parse_input_parameters(&call_info)?;
|
||||||
self.parse_application(&call_info);
|
self.parse_application(&call_info);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -72,20 +71,46 @@ impl Start {
|
|||||||
Ok(result)
|
Ok(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_filenames(&mut self, call_info: &CallInfo) -> Result<(), ShellError> {
|
fn parse_input_parameters(&mut self, call_info: &CallInfo) -> Result<(), ShellError> {
|
||||||
let candidates = match &call_info.args.positional {
|
let candidates = match &call_info.args.positional {
|
||||||
Some(values) => {
|
Some(values) => {
|
||||||
let mut result = vec![];
|
let mut result = vec![];
|
||||||
|
|
||||||
for value in values.iter() {
|
for value in values.iter() {
|
||||||
let res = self.glob_to_values(value)?;
|
let val_str = value.as_string();
|
||||||
result.extend(res);
|
match val_str {
|
||||||
|
Ok(s) => {
|
||||||
|
if s.to_ascii_lowercase().starts_with("http")
|
||||||
|
|| s.to_ascii_lowercase().starts_with("https")
|
||||||
|
{
|
||||||
|
if webbrowser::open(&s).is_ok() {
|
||||||
|
result.push("http/web".to_string().tagged_unknown())
|
||||||
|
} else {
|
||||||
|
return Err(ShellError::labeled_error(
|
||||||
|
&format!("error opening {}", &s),
|
||||||
|
"error opening url",
|
||||||
|
self.tag.span,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let res = self.glob_to_values(value)?;
|
||||||
|
result.extend(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
return Err(ShellError::labeled_error(
|
||||||
|
e.to_string(),
|
||||||
|
"no input given",
|
||||||
|
self.tag.span,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if result.is_empty() {
|
if result.is_empty() {
|
||||||
return Err(ShellError::labeled_error(
|
return Err(ShellError::labeled_error(
|
||||||
"No filename(s) given",
|
"No input given",
|
||||||
"no filename(s) given",
|
"no input given",
|
||||||
self.tag.span,
|
self.tag.span,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -93,15 +118,17 @@ impl Start {
|
|||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
return Err(ShellError::labeled_error(
|
return Err(ShellError::labeled_error(
|
||||||
"No filename(s) given",
|
"No input given",
|
||||||
"no filename(s) given",
|
"no input given",
|
||||||
self.tag.span,
|
self.tag.span,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
for candidate in candidates {
|
for candidate in candidates {
|
||||||
self.add_filename(candidate)?;
|
if !candidate.contains("http/web") {
|
||||||
|
self.add_filename(candidate)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
Loading…
Reference in New Issue
Block a user