use crossterm_winapi::ConsoleMode; use winapi::um::wincon::ENABLE_VIRTUAL_TERMINAL_PROCESSING; use crate::Result; /// Toggle virtual terminal processing. /// /// This method attempts to toggle virtual terminal processing for this /// console. If there was a problem toggling it, then an error returned. /// On success, the caller may assume that toggling it was successful. /// /// When virtual terminal processing is enabled, characters emitted to the /// console are parsed for VT100 and similar control character sequences /// that control color and other similar operations. pub(crate) fn set_virtual_terminal_processing(yes: bool) -> Result<()> { let mask = ENABLE_VIRTUAL_TERMINAL_PROCESSING; let console_mode = ConsoleMode::new()?; let old_mode = console_mode.mode()?; let new_mode = if yes { old_mode | mask } else { old_mode & !mask }; if old_mode != new_mode { console_mode.set_mode(new_mode)?; } Ok(()) }