diff options
author | Philipp Gesang <phg@phi-gamma.net> | 2021-12-22 15:47:07 +0100 |
---|---|---|
committer | Philipp Gesang <phg@phi-gamma.net> | 2021-12-22 15:47:07 +0100 |
commit | f87a4df1bc8d1b4be67046ab5672bb866737081f (patch) | |
tree | b7c8ac5e2372af7c8750db5247ee8479b8deb843 | |
parent | c7ebd8c35cfbf2de62a6ac058d98c26becb83390 (diff) | |
download | vtcol-f87a4df1bc8d1b4be67046ab5672bb866737081f.tar.gz |
bin: add switch for flag defaults
-rw-r--r-- | src/vtcol.rs | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/src/vtcol.rs b/src/vtcol.rs index a3ff57b..183da18 100644 --- a/src/vtcol.rs +++ b/src/vtcol.rs @@ -134,7 +134,7 @@ enum FlagJob /** Set all keyboard flags at once. */ Set(KbLedFlags), /** Set keyboard LED state of individual LEDs. */ - SetIndividual(Option<bool>, Option<bool>, Option<bool>), + SetIndividual(bool, Option<bool>, Option<bool>, Option<bool>), } impl FlagJob @@ -171,6 +171,7 @@ impl FlagJob /** Set / unset keyboard flags using the current as base. */ fn set_individual( con: Option<String>, + dflt: bool, cap: Option<bool>, num: Option<bool>, scr: Option<bool>, @@ -181,9 +182,15 @@ impl FlagJob let mut st = KbLedFlags::get(&fd)?; - cap.map(|b| st.set_cap(b)); - num.map(|b| st.set_num(b)); - scr.map(|b| st.set_scr(b)); + if dflt { + cap.map(|b| st.set_default_cap(b)); + num.map(|b| st.set_default_num(b)); + scr.map(|b| st.set_default_scr(b)); + } else { + cap.map(|b| st.set_cap(b)); + num.map(|b| st.set_num(b)); + scr.map(|b| st.set_scr(b)); + } st.set(&fd)?; vrb!("applied"); @@ -199,8 +206,8 @@ impl Run for FlagJob match self { Self::Get(raw) => Self::get(console, raw), Self::Set(flags) => Self::set(console, flags), - Self::SetIndividual(c, n, s) => - Self::set_individual(console, c, n, s), + Self::SetIndividual(dflt, c, n, s) => + Self::set_individual(console, dflt, c, n, s), } } } /* [impl Run for FlagJob] */ @@ -675,25 +682,31 @@ impl<'a> Job ) .takes_value(true) .required_unless_one(&[ - "revert", "caps", "num", - "scroll", + "caps", "num", "scroll", ]) .conflicts_with_all(&[ - "revert", "caps", "num", - "scroll", + "dflt", "caps", "num", "scroll", ]) .value_name("STATE"), ) .arg( + Arg::with_name("dflt") + .short("d") + .long("default") + .help( + "operate on defaults, not the \ + current state", + ) + .takes_value(false), + ) + .arg( Arg::with_name("caps") .short("c") .long("caps") .help("[de]activate Caps Lock flag") .takes_value(true) .possible_values(&["on", "off"]) - .conflicts_with_all(&[ - "revert", "u8", - ]) + .conflicts_with("u8") .value_name("STATE"), ) .arg( @@ -703,9 +716,7 @@ impl<'a> Job .help("[de]activate Num Lock flag") .takes_value(true) .possible_values(&["on", "off"]) - .conflicts_with_all(&[ - "revert", "u8", - ]) + .conflicts_with("u8") .value_name("STATE"), ) .arg( @@ -717,9 +728,7 @@ impl<'a> Job ) .takes_value(true) .possible_values(&["on", "off"]) - .conflicts_with_all(&[ - "revert", "u8", - ]) + .conflicts_with("u8") .value_name("STATE"), ), ), @@ -922,6 +931,8 @@ impl<'a> Job ))), )); } + + let dflt = subm.is_present("dflt"); let cap = subm.value_of("caps").map(|a| a == "on"); let num = @@ -931,7 +942,9 @@ impl<'a> Job Ok(Self( con, Subcmd::Kb(KbJob::Flags( - FlagJob::SetIndividual(cap, num, scr), + FlagJob::SetIndividual( + dflt, cap, num, scr, + ), )), )) }, |