feat(core): add start and stop aliases
This commit is contained in:
parent
7bdeff8bb7
commit
6dc3f1093d
|
@ -98,3 +98,8 @@ pub struct PathsOverrides {
|
||||||
pub runtime: Option<PathBuf>,
|
pub runtime: Option<PathBuf>,
|
||||||
pub packages: Option<PathBuf>,
|
pub packages: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct CliAlias {
|
||||||
|
pub subcommand: String,
|
||||||
|
pub forward_into: String,
|
||||||
|
}
|
|
@ -26,7 +26,7 @@ extern crate lazy_static;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use clap::{App, AppSettings, Arg, ArgMatches, SubCommand};
|
use clap::{App, AppSettings, Arg, ArgMatches, SubCommand};
|
||||||
use cli::{CliModule, CliModuleArgs};
|
use cli::{CliAlias, CliModule, CliModuleArgs};
|
||||||
use log::{error, info, warn};
|
use log::{error, info, warn};
|
||||||
use logging::FileProxy;
|
use logging::FileProxy;
|
||||||
use simplelog::{
|
use simplelog::{
|
||||||
|
@ -68,6 +68,17 @@ lazy_static! {
|
||||||
cli::env_path::new(),
|
cli::env_path::new(),
|
||||||
cli::service::new(),
|
cli::service::new(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
static ref ALIASES: Vec<CliAlias> = vec![
|
||||||
|
CliAlias {
|
||||||
|
subcommand: "start".to_owned(),
|
||||||
|
forward_into: "service".to_owned(),
|
||||||
|
},
|
||||||
|
CliAlias {
|
||||||
|
subcommand: "stop".to_owned(),
|
||||||
|
forward_into: "service".to_owned(),
|
||||||
|
},
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -102,6 +113,17 @@ fn main() {
|
||||||
.about("Remove an installed package. Equivalent to 'espanso package uninstall'")
|
.about("Remove an installed package. Equivalent to 'espanso package uninstall'")
|
||||||
.arg(Arg::with_name("package_name").help("Package name"));
|
.arg(Arg::with_name("package_name").help("Package name"));
|
||||||
|
|
||||||
|
let start_subcommand = SubCommand::with_name("start")
|
||||||
|
.about("Start espanso as a service")
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("unmanaged")
|
||||||
|
.long("unmanaged")
|
||||||
|
.required(false)
|
||||||
|
.takes_value(false)
|
||||||
|
.help("Run espanso as an unmanaged service (avoid system manager)"),
|
||||||
|
);
|
||||||
|
let stop_subcommand = SubCommand::with_name("stop").about("Stop espanso service");
|
||||||
|
|
||||||
let mut clap_instance = App::new("espanso")
|
let mut clap_instance = App::new("espanso")
|
||||||
.version(VERSION)
|
.version(VERSION)
|
||||||
.author("Federico Terzi")
|
.author("Federico Terzi")
|
||||||
|
@ -276,20 +298,12 @@ fn main() {
|
||||||
SubCommand::with_name("check")
|
SubCommand::with_name("check")
|
||||||
.about("Check if espanso is registered as a system service"),
|
.about("Check if espanso is registered as a system service"),
|
||||||
)
|
)
|
||||||
.subcommand(
|
.subcommand(start_subcommand.clone())
|
||||||
SubCommand::with_name("start")
|
.subcommand(stop_subcommand.clone())
|
||||||
.about("Start espanso as a service")
|
|
||||||
.arg(
|
|
||||||
Arg::with_name("unmanaged")
|
|
||||||
.long("unmanaged")
|
|
||||||
.required(false)
|
|
||||||
.takes_value(false)
|
|
||||||
.help("Run espanso as an unmanaged service (avoid system manager)"),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.subcommand(SubCommand::with_name("stop").about("Stop espanso service"))
|
|
||||||
.about("Register and manage 'espanso' as a system service."),
|
.about("Register and manage 'espanso' as a system service."),
|
||||||
)
|
)
|
||||||
|
.subcommand(start_subcommand)
|
||||||
|
.subcommand(stop_subcommand)
|
||||||
// .subcommand(SubCommand::with_name("match")
|
// .subcommand(SubCommand::with_name("match")
|
||||||
// .about("List and execute matches from the CLI")
|
// .about("List and execute matches from the CLI")
|
||||||
// .subcommand(SubCommand::with_name("list")
|
// .subcommand(SubCommand::with_name("list")
|
||||||
|
@ -379,10 +393,21 @@ fn main() {
|
||||||
_ => LevelFilter::Debug,
|
_ => LevelFilter::Debug,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut handler = CLI_HANDLERS
|
let alias = ALIASES
|
||||||
.iter()
|
.iter()
|
||||||
.find(|cli| matches.subcommand_matches(&cli.subcommand).is_some());
|
.find(|cli| matches.subcommand_matches(&cli.subcommand).is_some());
|
||||||
|
|
||||||
|
let mut handler = if let Some(alias) = alias {
|
||||||
|
CLI_HANDLERS
|
||||||
|
.iter()
|
||||||
|
.find(|cli| &cli.subcommand == &alias.forward_into)
|
||||||
|
} else {
|
||||||
|
CLI_HANDLERS
|
||||||
|
.iter()
|
||||||
|
.find(|cli| matches.subcommand_matches(&cli.subcommand).is_some())
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// When started from the macOS App Bundle, override the default
|
// When started from the macOS App Bundle, override the default
|
||||||
// handler with "launcher" if not present, otherwise the GUI could not be started.
|
// handler with "launcher" if not present, otherwise the GUI could not be started.
|
||||||
if handler.is_none() {
|
if handler.is_none() {
|
||||||
|
@ -492,7 +517,12 @@ fn main() {
|
||||||
cli_args.paths = Some(paths);
|
cli_args.paths = Some(paths);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(args) = matches.subcommand_matches(&handler.subcommand) {
|
// If the current handler is an alias, rather than sending the sub-arguments
|
||||||
|
// we simply forward the current ones
|
||||||
|
// For example, the args for "espanso start" are forwarded to "espanso service start"
|
||||||
|
if alias.is_some() {
|
||||||
|
cli_args.cli_args = Some(matches);
|
||||||
|
} else if let Some(args) = matches.subcommand_matches(&handler.subcommand) {
|
||||||
cli_args.cli_args = Some(args.clone());
|
cli_args.cli_args = Some(args.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user