#[cfg(windows)]
pub mod windows_ansi {
use windows::Win32::Foundation::HANDLE;
use windows::Win32::System::Console::ENABLE_VIRTUAL_TERMINAL_PROCESSING;
use windows::Win32::System::Console::GetConsoleMode;
use windows::Win32::System::Console::GetStdHandle;
use windows::Win32::System::Console::STD_OUTPUT_HANDLE;
use windows::Win32::System::Console::SetConsoleMode;
use windows::core::Result;
pub fn enable_ansi_support() -> Result<()> {
unsafe {
let handle = GetStdHandle(STD_OUTPUT_HANDLE)?;
if handle == HANDLE::default() {
return Err(windows::core::Error::from_thread());
}
let mut mode = std::mem::zeroed();
GetConsoleMode(handle, &mut mode)?;
SetConsoleMode(handle, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING)?;
Ok(())
}
}
}
#[cfg(windows)]
pub mod windows_utf8 {
use windows::Win32::Globalization::GetACP;
pub fn is_system_utf8() -> bool {
unsafe { GetACP() == 65001 }
}
}