a9fa1bf77b
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
82 lines
2.5 KiB
Rust
82 lines
2.5 KiB
Rust
use clap::{Parser, Subcommand, ValueEnum};
|
|
|
|
#[derive(Parser, Debug)]
|
|
#[command(name = "spacesh", about = "spacesh CLI — thin client to the spacesh daemon")]
|
|
pub struct Cli {
|
|
/// Print raw JSON instead of human output.
|
|
#[arg(long, global = true)]
|
|
pub json: bool,
|
|
#[command(subcommand)]
|
|
pub cmd: Sub,
|
|
}
|
|
|
|
#[derive(ValueEnum, Clone, Copy, Debug, PartialEq)]
|
|
pub enum StateArg { Work, Wait, Done, Error, Idle }
|
|
|
|
#[derive(ValueEnum, Clone, Copy, Debug, PartialEq)]
|
|
pub enum DirArg { Right, Down }
|
|
|
|
#[derive(ValueEnum, Clone, Copy, Debug, PartialEq)]
|
|
pub enum EdgeArg { Left, Right, Top, Bottom }
|
|
|
|
#[derive(Subcommand, Debug)]
|
|
pub enum Sub {
|
|
Open { path: String },
|
|
Status,
|
|
NewSurface {
|
|
workspace_id: String,
|
|
#[arg(long)] cmd: Option<String>,
|
|
#[arg(long = "arg")] args: Vec<String>,
|
|
#[arg(long, default_value_t = 80)] cols: u16,
|
|
#[arg(long, default_value_t = 24)] rows: u16,
|
|
},
|
|
Split {
|
|
surface_id: String,
|
|
#[arg(long, value_enum, default_value_t = DirArg::Right)] dir: DirArg,
|
|
#[arg(long)] cmd: Option<String>,
|
|
#[arg(long = "arg")] args: Vec<String>,
|
|
},
|
|
Close { surface_id: String },
|
|
Focus { surface_id: String },
|
|
Restart { surface_id: String },
|
|
Notify {
|
|
#[arg(long)] surface: String,
|
|
#[arg(long, value_enum)] state: StateArg,
|
|
},
|
|
ApplyPreset {
|
|
workspace_id: String,
|
|
#[arg(long)] preset: String,
|
|
#[arg(long = "agent")] agents: Vec<String>,
|
|
},
|
|
SetRatios {
|
|
workspace_id: String,
|
|
#[arg(long, value_delimiter = ',')] path: Vec<u32>,
|
|
#[arg(long, value_delimiter = ',')] ratios: Vec<f32>,
|
|
},
|
|
Move {
|
|
surface_id: String,
|
|
#[arg(long)] target: String,
|
|
#[arg(long, value_enum)] edge: EdgeArg,
|
|
},
|
|
CloseWorkspace { workspace_id: String },
|
|
Group {
|
|
#[command(subcommand)] action: GroupAction,
|
|
},
|
|
SetMeta {
|
|
workspace_id: String,
|
|
#[arg(long)] name: Option<String>,
|
|
#[arg(long)] group: Option<String>,
|
|
#[arg(long)] unread: Option<bool>,
|
|
#[arg(long)] order: Option<u32>,
|
|
},
|
|
Shutdown,
|
|
Completions { shell: clap_complete::Shell },
|
|
}
|
|
|
|
#[derive(Subcommand, Debug)]
|
|
pub enum GroupAction {
|
|
Create { #[arg(long)] name: String, #[arg(long)] color: String },
|
|
Set { group_id: String, #[arg(long)] name: Option<String>, #[arg(long)] color: Option<String>, #[arg(long)] order: Option<u32> },
|
|
Delete { group_id: String },
|
|
}
|