use crate::setup::Setup; use crate::{ consts::{ZELLIJ_CONFIG_DIR_ENV, ZELLIJ_CONFIG_FILE_ENV}, input::options::CliOptions, }; use clap::{Parser, Subcommand}; use serde::{Deserialize, Serialize}; use std::path::PathBuf; #[derive(Parser, Default, Debug, Clone, Serialize, Deserialize)] #[clap(version, name = "zellij")] pub struct CliArgs { /// Maximum panes on screen, caution: opening more panes will close old ones #[clap(long, value_parser)] pub max_panes: Option, /// Change where zellij looks for plugins #[clap(long, value_parser, overrides_with = "data_dir")] pub data_dir: Option, /// Run server listening at the specified socket path #[clap(long, value_parser, hide = true, overrides_with = "server")] pub server: Option, /// Specify name of a new session #[clap(long, short, overrides_with = "session", value_parser)] pub session: Option, /// Name of a predefined layout inside the layout directory or the path to a layout file #[clap(short, long, value_parser, overrides_with = "layout")] pub layout: Option, /// Change where zellij looks for the configuration file #[clap(short, long, overrides_with = "config", env = ZELLIJ_CONFIG_FILE_ENV, value_parser)] pub config: Option, /// Change where zellij looks for the configuration directory #[clap(long, overrides_with = "config_dir", env = ZELLIJ_CONFIG_DIR_ENV, value_parser)] pub config_dir: Option, #[clap(subcommand)] pub command: Option, /// Specify emitting additional debug information #[clap(short, long, value_parser)] pub debug: bool, } #[derive(Debug, Subcommand, Clone, Serialize, Deserialize)] pub enum Command { /// Change the behaviour of zellij #[clap(name = "options", value_parser)] Options(CliOptions), /// Setup zellij and check its configuration #[clap(name = "setup", value_parser)] Setup(Setup), /// Explore existing zellij sessions #[clap(flatten)] Sessions(Sessions), } #[derive(Debug, Subcommand, Clone, Serialize, Deserialize)] pub enum SessionCommand { /// Change the behaviour of zellij #[clap(name = "options")] Options(CliOptions), } #[derive(Debug, Subcommand, Clone, Serialize, Deserialize)] pub enum Sessions { /// List active sessions #[clap(visible_alias = "ls")] ListSessions, /// Attach to a session #[clap(visible_alias = "a")] Attach { /// Name of the session to attach to. #[clap(value_parser)] session_name: Option, /// Create a session if one does not exist. #[clap(short, long, value_parser)] create: bool, /// Number of the session index in the active sessions ordered creation date. #[clap(long, value_parser)] index: Option, /// Change the behaviour of zellij #[clap(subcommand, name = "options")] options: Option>, }, /// Kill the specific session #[clap(visible_alias = "k")] KillSession { /// Name of target session #[clap(value_parser)] target_session: Option, }, /// Kill all sessions #[clap(visible_alias = "ka")] KillAllSessions { /// Automatic yes to prompts #[clap(short, long, value_parser)] yes: bool, }, /// Send actions to a specific session #[cfg(feature = "unstable")] Action { action: Option }, }