diff --git a/src/windows_term/mod.rs b/src/windows_term/mod.rs index 1c82c0a5..2c71f4f7 100644 --- a/src/windows_term/mod.rs +++ b/src/windows_term/mod.rs @@ -78,6 +78,7 @@ pub(crate) fn is_a_color_terminal(out: &Term) -> bool { enable_ansi_on(out) } +/// Enables or disables the `mode` flag on the given `HANDLE` and yields the previous mode. fn set_console_mode(handle: HANDLE, mode: CONSOLE_MODE, enable: bool) -> Option { unsafe { let mut dw_mode = 0; @@ -85,10 +86,9 @@ fn set_console_mode(handle: HANDLE, mode: CONSOLE_MODE, enable: bool) -> Option< return None; } - let new_dw_mode = if enable { - dw_mode | mode - } else { - dw_mode & !mode + let new_dw_mode = match enable { + true => dw_mode | mode, + false => dw_mode & !mode, }; if SetConsoleMode(handle, new_dw_mode) == 0 { @@ -106,9 +106,9 @@ struct ConsoleModeGuard { impl ConsoleModeGuard { fn set(handle: HANDLE, mode: CONSOLE_MODE, enable: bool) -> Option { - set_console_mode(handle, mode, enable).map(|restore_mode| ConsoleModeGuard { + Some(ConsoleModeGuard { handle, - restore_mode, + restore_mode: set_console_mode(handle, mode, enable)?, }) } } @@ -130,10 +130,6 @@ fn enable_ansi_on(out: &Term) -> bool { .is_some() } -// fn set_enable_processed_input(out: &Term, enable: bool) -> bool { -// set_console_mode(out, ENABLE_PROCESSED_INPUT, enable) -// } - unsafe fn console_on_any(fds: &[STD_HANDLE]) -> bool { for &fd in fds { let mut out = 0; @@ -414,15 +410,13 @@ pub(crate) fn read_secure() -> io::Result { pub(crate) fn read_single_key(ctrlc_key: bool) -> io::Result { let key_event = { - let _guard = if ctrlc_key { + let _guard = ctrlc_key.then(|| { ConsoleModeGuard::set( unsafe { GetStdHandle(STD_INPUT_HANDLE) }, ENABLE_PROCESSED_INPUT, false, ) - } else { - None - }; + }); read_key_event()? };