1#[cfg(windows)]
10pub fn enable_ansi_support() -> Result<(), u32> {
11 use winapi::um::processenv::GetStdHandle;
12 use winapi::um::errhandlingapi::GetLastError;
13 use winapi::um::consoleapi::{GetConsoleMode, SetConsoleMode};
14
15 const STD_OUT_HANDLE: u32 = -11i32 as u32;
16 const ENABLE_VIRTUAL_TERMINAL_PROCESSING: u32 = 0x0004;
17
18 unsafe {
19 let std_out_handle = GetStdHandle(STD_OUT_HANDLE);
21 let error_code = GetLastError();
22 if error_code != 0 { return Err(error_code); }
23
24 let mut console_mode: u32 = 0;
26 GetConsoleMode(std_out_handle, &mut console_mode);
27 let error_code = GetLastError();
28 if error_code != 0 { return Err(error_code); }
29
30 if console_mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING == 0 {
32 SetConsoleMode(std_out_handle, console_mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
34 let error_code = GetLastError();
35 if error_code != 0 { return Err(error_code); }
36 }
37 }
38
39 return Ok(());
40}