use clap::{Parser, Subcommand};
const DEFAULT_HISTORY: usize = 10000;
const MAX_HISTORY: usize = 1_000_000;
fn parse_history(s: &str) -> Result<usize, String> {
let val: usize = s.parse().map_err(|e| format!("{e}"))?;
if val > MAX_HISTORY {
return Err(format!("history size must be at most {MAX_HISTORY}"));
}
Ok(val)
}
#[derive(Parser)]
#[command(
name = "retach",
version,
about = "Terminal multiplexer with native scrollback"
)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand)]
pub enum Command {
Open {
name: String,
#[arg(long, default_value_t = DEFAULT_HISTORY, value_parser = parse_history)]
history: usize,
},
New {
name: Option<String>,
#[arg(long, default_value_t = DEFAULT_HISTORY, value_parser = parse_history)]
history: usize,
},
Attach {
name: String,
},
List,
Kill {
name: String,
},
#[command(hide = true)]
Server,
}