summaryrefslogtreecommitdiff
path: root/runtime/ops/tty.rs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/ops/tty.rs')
-rw-r--r--runtime/ops/tty.rs18
1 files changed, 14 insertions, 4 deletions
diff --git a/runtime/ops/tty.rs b/runtime/ops/tty.rs
index be22bdd2a..5b49e3a24 100644
--- a/runtime/ops/tty.rs
+++ b/runtime/ops/tty.rs
@@ -351,10 +351,20 @@ fn console_size_from_fd(
{
return Err(Error::last_os_error());
}
- Ok(ConsoleSize {
- cols: bufinfo.dwSize.X as u32,
- rows: bufinfo.dwSize.Y as u32,
- })
+
+ // calculate the size of the visible window
+ // * use over/under-flow protections b/c MSDN docs only imply that srWindow components are all non-negative
+ // * ref: <https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str> @@ <https://archive.is/sfjnm>
+ let cols = std::cmp::max(
+ bufinfo.srWindow.Right as i32 - bufinfo.srWindow.Left as i32 + 1,
+ 0,
+ ) as u32;
+ let rows = std::cmp::max(
+ bufinfo.srWindow.Bottom as i32 - bufinfo.srWindow.Top as i32 + 1,
+ 0,
+ ) as u32;
+
+ Ok(ConsoleSize { cols, rows })
}
}