| //! Interactively manipulate wincon colors |
| |
| #![cfg_attr(not(windows), allow(dead_code))] |
| |
| #[cfg(not(windows))] |
| fn main() { |
| panic!("unsupported"); |
| } |
| |
| #[cfg(windows)] |
| fn main() -> Result<(), lexopt::Error> { |
| use anstyle_wincon::WinconStream as _; |
| |
| let args = Args::parse()?; |
| let stdout = std::io::stdout(); |
| let mut stdout = stdout.lock(); |
| |
| let fg = args.fg.and_then(|c| c.into_ansi()); |
| let bg = args.bg.and_then(|c| c.into_ansi()); |
| |
| let _ = stdout.write_colored(fg, bg, "".as_bytes()); |
| |
| std::mem::forget(stdout); |
| |
| Ok(()) |
| } |
| |
| #[derive(Default)] |
| struct Args { |
| fg: Option<anstyle::Ansi256Color>, |
| bg: Option<anstyle::Ansi256Color>, |
| } |
| |
| impl Args { |
| fn parse() -> Result<Self, lexopt::Error> { |
| use lexopt::prelude::*; |
| |
| let mut res = Args::default(); |
| |
| let mut args = lexopt::Parser::from_env(); |
| while let Some(arg) = args.next()? { |
| match arg { |
| Long("fg") => { |
| res.fg = Some( |
| args.value()? |
| .parse_with(|s| s.parse::<u8>().map(anstyle::Ansi256Color))?, |
| ); |
| } |
| Long("bg") => { |
| res.fg = Some( |
| args.value()? |
| .parse_with(|s| s.parse::<u8>().map(anstyle::Ansi256Color))?, |
| ); |
| } |
| _ => return Err(arg.unexpected()), |
| } |
| } |
| Ok(res) |
| } |
| } |