From a363079ac644ad0ea057f99820b04648f59336be Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Wed, 29 Mar 2017 15:58:01 -0700 Subject: [PATCH] progress needs to take in account situations where the cursor is not on the left edge (like when tables are being output) --- .../host/msh/ProgressPane.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs index 7737d4203c6..e9b0ed1d692 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs @@ -91,11 +91,20 @@ class ProgressPane int rows = tempProgressRegion.GetLength(0); int cols = tempProgressRegion.GetLength(1); + + _savedCursor = _rawui.CursorPosition; _location.X = 0; #if UNIX _location.Y = _rawui.CursorPosition.Y; + // if cursor is not on left edge already move down one line + if (_rawui.CursorPosition.X != 0) + { + _location.Y++; + _rawui.CursorPosition = _location; + } + //if the cursor is at the bottom, create screen buffer space by scrolling int scrollRows = rows - ((_rawui.BufferSize.Height - 1) - _location.Y); for (int i = 0; i < rows; i++) @@ -105,6 +114,7 @@ class ProgressPane if (scrollRows > 0) { _location.Y -= scrollRows; + _savedCursor.Y -= scrollRows; } //create cleared region to clear progress bar later @@ -161,6 +171,7 @@ class ProgressPane _rawui.SetBufferContents(_location, _savedRegion); _savedRegion = null; + _rawui.CursorPosition = _savedCursor; } } @@ -249,6 +260,7 @@ class ProgressPane private Coordinates _location = new Coordinates(0, 0); + private Coordinates _savedCursor; private Size _bufSize; private BufferCell[,] _savedRegion; private BufferCell[,] _progressRegion;