1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
use crate::terminal::message::{Message, StdOut}; use std::process::{Command, Stdio}; pub fn open_browser(url: &str) -> Result<(), failure::Error> { if cfg!(target_os = "windows") { let url_escaped = url.replace("&", "^&"); let windows_cmd = format!("start {}", url_escaped); Command::new("cmd") .args(&["/C", &windows_cmd]) .stdout(Stdio::null()) .stderr(Stdio::null()) .spawn()?; } else if cfg!(target_os = "linux") { let linux_cmd = format!(r#"xdg-open "{}""#, url); Command::new("sh") .arg("-c") .arg(&linux_cmd) .stdout(Stdio::null()) .stderr(Stdio::null()) .spawn()?; } else { let mac_cmd = format!(r#"open "{}""#, url); Command::new("sh") .arg("-c") .arg(&mac_cmd) .stdout(Stdio::null()) .stderr(Stdio::null()) .spawn()?; }; let msg = format!("Opened a link in your default browser: {}", url); StdOut::info(&msg); Ok(()) }