From 57c8301eb44a8f88dc028ea08471e066891fd4f9 Mon Sep 17 00:00:00 2001 From: Murarth Date: Tue, 21 Jan 2020 22:56:24 -0700 Subject: [PATCH 1/2] Windows: Correct result of `Terminal::size` --- src/windows/terminal.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/windows/terminal.rs b/src/windows/terminal.rs index c4aa6cc..efc0086 100644 --- a/src/windows/terminal.rs +++ b/src/windows/terminal.rs @@ -1019,7 +1019,13 @@ unsafe fn console_mode(handle: HANDLE) -> io::Result { unsafe fn console_size(handle: HANDLE) -> io::Result { let info = console_info(handle)?; - Ok(coord_to_size(info.dwSize)) + let lines = (info.srWindow.Right - info.srWindow.Left + 1) as usize; + let columns = (info.srWindow.Bottom - info.srWindow.Top + 1) as usize; + + Ok(Size { + lines, + columns, + }) } unsafe fn set_console_mode(handle: HANDLE, mode: DWORD) -> io::Result<()> { @@ -1102,13 +1108,6 @@ fn coord_to_cursor(pos: COORD) -> Cursor { } } -fn coord_to_size(size: COORD) -> Size { - Size{ - lines: size.Y as usize, - columns: size.X as usize, - } -} - fn cursor_to_coord(pos: Cursor) -> COORD { COORD{ Y: to_short(pos.line), From 68456c561bc9fb73bc71c405e71fe8ef56f4d20d Mon Sep 17 00:00:00 2001 From: Murarth Date: Thu, 12 Mar 2020 23:31:58 -0700 Subject: [PATCH 2/2] Add 1 to console lines and columns setting --- src/windows/terminal.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/windows/terminal.rs b/src/windows/terminal.rs index efc0086..01bfb24 100644 --- a/src/windows/terminal.rs +++ b/src/windows/terminal.rs @@ -28,7 +28,7 @@ use winapi::um::consoleapi::{ SetConsoleMode, }; use winapi::um::handleapi::{ - CloseHandle, + CloseHandle, INVALID_HANDLE_VALUE, }; use winapi::um::processenv::{ GetStdHandle, @@ -1117,8 +1117,8 @@ fn cursor_to_coord(pos: Cursor) -> COORD { fn size_to_coord(size: Size) -> COORD { COORD{ - Y: to_short(size.lines), - X: to_short(size.columns), + Y: to_short(size.lines + 1), + X: to_short(size.columns + 1), } } @@ -1256,7 +1256,7 @@ fn result_bool(b: BOOL) -> io::Result<()> { } fn result_handle(ptr: HANDLE) -> io::Result { - if ptr.is_null() { + if ptr == INVALID_HANDLE_VALUE { Err(io::Error::last_os_error()) } else { Ok(ptr)