#[cfg(all(feature = "windows-vt", target_os = "windows"))]
mod inner {
use windows_sys::Win32::Foundation::INVALID_HANDLE_VALUE;
use windows_sys::Win32::System::Console::{
GetConsoleMode, GetStdHandle, SetConsoleMode, ENABLE_PROCESSED_OUTPUT,
ENABLE_VIRTUAL_TERMINAL_PROCESSING, STD_OUTPUT_HANDLE,
};
pub fn enable_windows_vt() {
unsafe {
let handle = GetStdHandle(STD_OUTPUT_HANDLE);
if handle == INVALID_HANDLE_VALUE || handle.is_null() {
return;
}
let mut mode: u32 = 0;
if GetConsoleMode(handle, &mut mode) == 0 {
return; }
let new_mode = mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING | ENABLE_PROCESSED_OUTPUT;
SetConsoleMode(handle, new_mode);
}
}
}
#[cfg(not(all(feature = "windows-vt", target_os = "windows")))]
mod inner {
#[inline(always)]
pub fn enable_windows_vt() {}
}
pub use inner::enable_windows_vt;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn enable_windows_vt_no_panic_on_any_platform() {
enable_windows_vt(); }
#[test]
fn enable_windows_vt_has_correct_signature() {
let f: fn() = enable_windows_vt;
f(); }
#[test]
fn enable_windows_vt_idempotent_noop_on_non_windows() {
for _ in 0..3 {
enable_windows_vt();
}
}
#[cfg(all(feature = "windows-vt", target_os = "windows"))]
#[test]
fn enable_windows_vt_real_path_on_windows() {
enable_windows_vt(); }
}