blob: 1a6d71bb08c43d896501ae10a477c457f1d44577 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#[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(())
}
}
}
|