From 4a89c7aeb3e12b8691fa55101c1dfdd8001e70fa Mon Sep 17 00:00:00 2001 From: 1imo Date: Sat, 18 Oct 2025 16:48:08 +0100 Subject: [PATCH 1/2] Fix issue-1: Update StopwatchApplication --- src/Stopwatch.App/StopwatchApplication.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Stopwatch.App/StopwatchApplication.cs b/src/Stopwatch.App/StopwatchApplication.cs index 735367e..437b52d 100644 --- a/src/Stopwatch.App/StopwatchApplication.cs +++ b/src/Stopwatch.App/StopwatchApplication.cs @@ -33,7 +33,7 @@ public async Task RunAsync(CancellationToken cancellationToken) var elapsed = await _stopwatchService.GetElapsedAsync(); var formatted = FormatElapsed(elapsed); - _console.Write($"\r{formatted} > {_inputBuffer} "); + _console.Write($"\r{formatted} > {_inputBuffer}"); if (_console.KeyAvailable) { From fa15bfff5e8a1a453866ab8621513655d380febc Mon Sep 17 00:00:00 2001 From: 1imo Date: Sat, 18 Oct 2025 17:01:15 +0100 Subject: [PATCH 2/2] Fixed artifact issues on delete --- src/Stopwatch.App/StopwatchApplication.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Stopwatch.App/StopwatchApplication.cs b/src/Stopwatch.App/StopwatchApplication.cs index 437b52d..ef80183 100644 --- a/src/Stopwatch.App/StopwatchApplication.cs +++ b/src/Stopwatch.App/StopwatchApplication.cs @@ -10,6 +10,7 @@ public sealed class StopwatchApplication private readonly ICommandParser _commandParser; private readonly CommandHandler _commandHandler; private readonly StringBuilder _inputBuffer = new(); + private int _previousLineLength; public StopwatchApplication( IStopwatchService stopwatchService, @@ -31,9 +32,7 @@ public async Task RunAsync(CancellationToken cancellationToken) while (!cancellationToken.IsCancellationRequested && running) { var elapsed = await _stopwatchService.GetElapsedAsync(); - var formatted = FormatElapsed(elapsed); - - _console.Write($"\r{formatted} > {_inputBuffer}"); + RenderLine(elapsed); if (_console.KeyAvailable) { @@ -43,6 +42,7 @@ public async Task RunAsync(CancellationToken cancellationToken) { var command = _commandParser.Parse(_inputBuffer.ToString()); _inputBuffer.Clear(); + _previousLineLength = 0; _console.Write("\n"); @@ -55,10 +55,12 @@ public async Task RunAsync(CancellationToken cancellationToken) else if (key.Key == ConsoleKey.Backspace && _inputBuffer.Length > 0) { _inputBuffer.Length--; + RenderLine(elapsed); } else if (!char.IsControl(key.KeyChar)) { _inputBuffer.Append(key.KeyChar); + RenderLine(elapsed); } } @@ -77,6 +79,17 @@ public async Task RunAsync(CancellationToken cancellationToken) _console.Write("\n"); } + private void RenderLine(TimeSpan elapsed) + { + var formatted = FormatElapsed(elapsed); + var output = $"\r{formatted} > {_inputBuffer}"; + var padding = Math.Max(0, _previousLineLength - output.Length); + var paddedOutput = output + new string(' ', padding); + _previousLineLength = output.Length; + + _console.Write(paddedOutput); + } + private static string FormatElapsed(TimeSpan elapsed) { var days = (int)elapsed.TotalDays;