#[macro_use] extern crate clap; use clap::{Arg, App, AppSettings}; use tvrs::MultiScreen; fn main() { let matches = App::new(crate_name!()) .author(crate_authors!(" ")) .version(crate_version!()) .setting(AppSettings::ColoredHelp) .arg(Arg::with_name("action") .help("Action to do") .takes_value(true) .value_name("ACTION") .possible_values(&["disable", "duplicate", "enable","only-secondary"]) .required(true)) .arg(Arg::with_name("position") .help("Specify the position of the second screen") .possible_values(&["left", "right", "above", "below"]) .required_if("action", "enable")) .arg(Arg::with_name("sound") .help("Outputs the sound to the HDMI (requires pulseaudio)") .short("s") .long("sound")) .get_matches(); let screens = MultiScreen::detect() .expect("An error happened while finding screens"); let sound = matches.occurrences_of("sound") > 0; let result = match matches.value_of("action") { Some("disable") => screens.only_primary(), Some("duplicate") => screens.duplicate(), Some("enable") => { // Can never fail, clap will crash before this let side = matches.value_of("position").unwrap().parse().unwrap(); screens.two_screens(side) }, Some("only-secondary") => screens.only_secondary(), // Can never happen, clap will crash before this _ => Ok(()) }; if sound { if let Err(e) = screens.enable_hdmi_sound_if_present() { eprintln!("Error: couldn't set hdmi sound: {:?}", e); } } result.expect("An error happenned while executing the command"); }