quickterm 0.1.0

A small drop-down terminal for Sway/i3 IPC
Documentation
use std::collections::BTreeMap;

use crate::error::QuicktermError;
use crate::expand::{env_map, expand_command};

pub fn quoted(s: &str) -> String {
    format!("'{s}'")
}

pub fn term_title(shell: &str) -> String {
    format!("{shell} - quickterm")
}

pub fn build_terminal_command(
    term: &str,
    title: &str,
    reentry_argv: &[String],
) -> Result<Vec<String>, QuicktermError> {
    match term {
        "foot" => Ok(vec![
            "footclient".to_string(),
            format!("--title={title}"),
            "--hold".to_string(),
            "--app-id=foot-sp".to_string(),
        ]
        .into_iter()
        .chain(reentry_argv.iter().cloned())
        .collect()),
        "alacritty" => Ok(vec![
            "alacritty".to_string(),
            "-t".to_string(),
            title.to_string(),
            "-e".to_string(),
        ]
        .into_iter()
        .chain(reentry_argv.iter().cloned())
        .collect()),
        custom => {
            let mut vars: BTreeMap<String, String> = env_map();
            let expanded = reentry_argv.join(" ");
            vars.insert("title".to_string(), quoted(title));
            vars.insert("expanded".to_string(), expanded);
            vars.insert("string".to_string(), quoted(&reentry_argv.join(" ")));
            expand_command(custom, &vars)
        }
    }
}