From a9e6311f565c3679e508ccb67e306ce9dd9ed5da Mon Sep 17 00:00:00 2001 From: Scott Bilas Date: Sat, 17 Aug 2024 20:32:34 +0100 Subject: [PATCH] Separate 'q' from ctrl-c --- src/Stale.Cli/Screen.cs | 2 +- src/Stale.Cli/Stale.Cli.csproj | 2 +- src/Stale.Cli/StaleApp.cs | 14 +++++++++++--- src/Stale.Cli/StaleCli.cs | 7 +++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Stale.Cli/Screen.cs b/src/Stale.Cli/Screen.cs index 92c605d..ff4060e 100644 --- a/src/Stale.Cli/Screen.cs +++ b/src/Stale.Cli/Screen.cs @@ -75,7 +75,7 @@ public void FlushStdout() if (_cb.Span.IsEmpty) return; - _terminal.Out(_cb.Memory); + _terminal.Out(_cb.Span); _cb.Clear(10*1024); } diff --git a/src/Stale.Cli/Stale.Cli.csproj b/src/Stale.Cli/Stale.Cli.csproj index d60c13c..ba483bd 100644 --- a/src/Stale.Cli/Stale.Cli.csproj +++ b/src/Stale.Cli/Stale.Cli.csproj @@ -19,8 +19,8 @@ + - diff --git a/src/Stale.Cli/StaleApp.cs b/src/Stale.Cli/StaleApp.cs index eb75461..daf22ab 100644 --- a/src/Stale.Cli/StaleApp.cs +++ b/src/Stale.Cli/StaleApp.cs @@ -5,6 +5,12 @@ using Vezel.Cathode.Text.Control; using Color = Spectre.Console.Color; +class CliExitException : Exception +{ + public CliExitException(string message) + : base(message) {} +} + readonly struct StaleOptions { public StaleOptions(StaleCliArguments args) @@ -171,7 +177,7 @@ void ControlPrintLogLine(bool isStdErr, ReadOnlyMemory chars, bool newline if (isStdErr) _screen.Control.Print(chars.ToString(), k_stdErrStyle); else - _screen.Control.Print(chars); + _screen.Control.Print(chars.Span); ControlFinishLogLine(newline); } @@ -238,6 +244,7 @@ async ValueTask OutLineAsync(bool isStdErr, ReadOnlyMemory chars) await _screen.FlushStdoutAsync(_ctx.CancelToken); } + // ReSharper disable once UnusedMember.Local void DebugRenderCursorPos() { { @@ -269,8 +276,9 @@ void Pause() } if (evt is { Char: 'q', Modifiers: 0 }) - _ctx.Cancel(); - else if (evt is { Char: '\r', Modifiers: 0 }) + throw new CliExitException("User quit"); + + if (evt is { Char: '\r', Modifiers: 0 }) _pauseSkip = 0; else if (evt is { Char: ' ', Modifiers: 0 }) _pauseSkip = 9; diff --git a/src/Stale.Cli/StaleCli.cs b/src/Stale.Cli/StaleCli.cs index c6f24ce..fd19f08 100644 --- a/src/Stale.Cli/StaleCli.cs +++ b/src/Stale.Cli/StaleCli.cs @@ -126,6 +126,13 @@ return await Exec(async () => (int)await StaleApp.Run(ctx, staleOptions, child)); } +catch (CliExitException x) +{ + ctx.LongTasks.AbortAll(); + if (ctx.IsVerbose) + ctx.Verbose(x.Message); + return (int)CliExitCode.Success; +} catch (CliErrorException x) { ctx.ErrorLine(x.Message);