Skip to content

Commit 7fa2c1a

Browse files
authored
Merge pull request #62 from revam/fix-console-pipe-on-windows
Fix output redirection on windows + more
2 parents ebab6b1 + 768061e commit 7fa2c1a

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

AVDump3CL/AVD3Console.cs

+14-8
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public class AVD3Console : IDisposable, IAVD3Console {
130130

131131
private readonly bool canManipulateCursor;
132132
private int displaySkipCount;
133-
private int maxTopCursorPos;
133+
private int maxTopCursorPos = 0;
134134
private int jitterDisplayUpdateCount;
135135
private readonly Stopwatch perfWatch = new();
136136

@@ -177,12 +177,13 @@ public void StopProgressDisplay() {
177177
progressBuilder.MarkFinished();
178178

179179
progressBuilder.Reset(this);
180-
var cursorTop = Console.CursorTop;
180+
var cursorTop = canManipulateCursor ? Console.CursorTop : 0;
181181
for(int i = cursorTop; i < maxTopCursorPos; i++) {
182182
progressBuilder.AppendLine();
183183
}
184184
Console.Write(progressBuilder.Buffer);
185-
Console.SetCursorPosition(0, cursorTop);
185+
if (canManipulateCursor)
186+
Console.SetCursorPosition(0, cursorTop);
186187
}
187188
}
188189
}
@@ -208,8 +209,11 @@ private void OnWriteProgress(object? _) {
208209
var progressLineCountPrev = progressBuilder.ProgressLineCount;
209210
progressBuilder.Reset(this);
210211

211-
maxTopCursorPos = Math.Max(maxTopCursorPos, Console.CursorTop);
212-
Console.SetCursorPosition(0, Math.Max(0, Console.CursorTop - progressLineCountPrev));
212+
if (canManipulateCursor)
213+
{
214+
maxTopCursorPos = Math.Max(maxTopCursorPos, Console.CursorTop);
215+
Console.SetCursorPosition(0, Math.Max(0, Console.CursorTop - progressLineCountPrev));
216+
}
213217

214218
string[] toWrite;
215219
lock(this.toWrite) {
@@ -231,7 +235,7 @@ private void OnWriteProgress(object? _) {
231235
//}
232236
if(lines[j].Length < progressBuilder.DisplayWidth) {
233237
progressBuilder.Buffer.Append(' ', progressBuilder.DisplayWidth - lines[j].Length);
234-
} else if(lines[j].Length >= progressBuilder.ConsoleWidth) {
238+
} else if(progressBuilder.DisplayWidth != 0 && lines[j].Length >= progressBuilder.ConsoleWidth) {
235239
progressBuilder.Buffer.Append(' ', Math.Max(0, progressBuilder.DisplayWidth - 2 - lines[j].Length % progressBuilder.DisplayWidth));
236240
}
237241

@@ -290,10 +294,12 @@ public void WriteLine(IEnumerable<string> values) {
290294
public IDisposable LockConsole() {
291295
progressTimer.Change(Timeout.Infinite, Timeout.Infinite);
292296
Monitor.Enter(progressWriteLock);
293-
Console.SetCursorPosition(0, maxTopCursorPos);
297+
if (canManipulateCursor)
298+
Console.SetCursorPosition(0, maxTopCursorPos);
294299

295300
return new ProxyDisposable(() => {
296-
maxTopCursorPos = Math.Max(maxTopCursorPos, Console.CursorTop);
301+
if (canManipulateCursor)
302+
maxTopCursorPos = Math.Max(maxTopCursorPos, Console.CursorTop);
297303
Monitor.Exit(progressWriteLock);
298304
progressTimer.Change(500, TickPeriod);
299305
});

0 commit comments

Comments
 (0)