#[cfg(windows)] pub mod win { use std::io; use std::os::windows::io::AsRawHandle; use winapi::um::consoleapi::GetConsoleMode; use winapi::um::consoleapi::SetConsoleMode; use winapi::um::wincon::ENABLE_VIRTUAL_TERMINAL_PROCESSING; use winapi::um::winbase::STD_OUTPUT_HANDLE; use winapi::um::processenv::GetStdHandle; use winapi::shared::minwindef::DWORD; pub fn enable_vt() -> io::Result<()> { unsafe { let h = GetStdHandle(STD_OUTPUT_HANDLE); if h.is_null() { return Err(io::Error::last_os_error()); } let mut mode: DWORD = 0; if GetConsoleMode(h, &mut mode) == 0 { return Err(io::Error::last_os_error()); } let new = mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING; if SetConsoleMode(h, new) == 0 { return Err(io::Error::last_os_error()); } Ok(()) } } }