use std::path::Path;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Multiplexer {
Tmux,
Zellij,
}
impl Multiplexer {
pub fn binary(self) -> &'static str {
match self {
Multiplexer::Tmux => "tmux",
Multiplexer::Zellij => "zellij",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SpawnMode {
Window,
Split,
}
pub fn build_tmux_command(name: &str, path: &Path, mode: SpawnMode) -> Vec<String> {
let path_str = path.display().to_string();
match mode {
SpawnMode::Window => vec![
"tmux".into(),
"new-window".into(),
"-n".into(),
name.into(),
"-c".into(),
path_str,
],
SpawnMode::Split => vec!["tmux".into(), "split-window".into(), "-c".into(), path_str],
}
}
pub fn build_zellij_command(name: &str, path: &Path, mode: SpawnMode) -> Vec<String> {
let path_str = path.display().to_string();
match mode {
SpawnMode::Window => vec![
"zellij".into(),
"action".into(),
"new-tab".into(),
"--name".into(),
name.into(),
"--cwd".into(),
path_str,
],
SpawnMode::Split => vec![
"zellij".into(),
"action".into(),
"new-pane".into(),
"--cwd".into(),
path_str,
],
}
}
pub fn detect_tmux(env: Option<String>) -> bool {
match env {
Some(s) => !s.is_empty(),
None => false,
}
}
pub fn detect_zellij(env: Option<String>) -> bool {
match env {
Some(s) => !s.is_empty(),
None => false,
}
}