diff --git a/src/lib.rs b/src/lib.rs index a93edaa3bfde174ba7b6caa018f39368af834bce..ae572d1368fc5420cca1801ad269bcd81aec62cc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -332,8 +332,19 @@ fn clear_screen(out: &mut Write) -> Result<()> { write_and_flush(out, b"\x1b[H\x1b[2J") } #[cfg(windows)] -fn clear_screen(out: &mut Write) -> Result<()> { - unimplemented!() +fn clear_screen(_: &mut Write) -> Result<()> { + let handle = unsafe { kernel32::GetStdHandle(STDOUT_FILENO) }; + let mut info = unsafe { mem::zeroed() }; + check!(kernel32::GetConsoleScreenBufferInfo(handle, &mut info)); + let coord = winapi::COORD { X: 0, Y: 0 }; + check!(kernel32::SetConsoleCursorPosition(handle, coord)); + let mut _count = 0; + check!(kernel32::FillConsoleOutputCharacterA(handle, + ' ', + info.dwSize.X * info.dwSize.Y, + coord, + &mut _count)); + Ok(()) } /// Beep, used for completion when there is nothing to complete or when all