Skip to main content

very_normal/
lib.rs

1pub mod app;
2pub mod coach;
3pub mod drill;
4pub mod gate;
5pub mod keymap;
6pub mod layout;
7pub mod oryx;
8pub mod report;
9pub mod store;
10pub mod warmup;
11
12/// Opens a URL with `$VERY_NORMAL_OPEN` (a command, `{url}` marks where the
13/// address goes), or with macOS `open`.
14pub fn open_url(url: &str) -> anyhow::Result<()> {
15    let template = std::env::var("VERY_NORMAL_OPEN").unwrap_or_else(|_| "open {url}".to_string());
16    let mut parts: Vec<String> = template.split_whitespace().map(str::to_string).collect();
17    if !parts.iter().any(|p| p.contains("{url}")) {
18        parts.push("{url}".into());
19    }
20    let parts: Vec<String> = parts.into_iter().map(|p| p.replace("{url}", url)).collect();
21    let (cmd, args) = parts
22        .split_first()
23        .ok_or_else(|| anyhow::anyhow!("VERY_NORMAL_OPEN is empty"))?;
24    std::process::Command::new(cmd)
25        .args(args)
26        .stdout(std::process::Stdio::null())
27        .stderr(std::process::Stdio::null())
28        .spawn()?;
29    Ok(())
30}