diff --git a/src/Spectre.Console/AnsiConsole.Recording.cs b/src/Spectre.Console/AnsiConsole.Recording.cs index 1451583..78c11cf 100644 --- a/src/Spectre.Console/AnsiConsole.Recording.cs +++ b/src/Spectre.Console/AnsiConsole.Recording.cs @@ -13,7 +13,10 @@ namespace Spectre.Console /// public static void Record() { - _recorder = new Recorder(_console.Value); + if (_recorder == null) + { + _recorder = new Recorder(Console); + } } /// diff --git a/src/Spectre.Console/AnsiConsole.cs b/src/Spectre.Console/AnsiConsole.cs index 2d0dc20..9fd7cd4 100644 --- a/src/Spectre.Console/AnsiConsole.cs +++ b/src/Spectre.Console/AnsiConsole.cs @@ -7,25 +7,43 @@ namespace Spectre.Console /// public static partial class AnsiConsole { - private static readonly Lazy _console = new Lazy(() => - { - var console = Create(new AnsiConsoleSettings + private static Recorder? _recorder; + private static Lazy _console = new Lazy( + () => { - Ansi = AnsiSupport.Detect, - ColorSystem = ColorSystemSupport.Detect, - Out = System.Console.Out, + var console = Create(new AnsiConsoleSettings + { + Ansi = AnsiSupport.Detect, + ColorSystem = ColorSystemSupport.Detect, + Out = System.Console.Out, + }); + + Created = true; + return console; }); - Created = true; - return console; - }); - - private static Recorder? _recorder; - /// - /// Gets the underlying . + /// Gets or sets the underlying . /// - public static IAnsiConsole Console => _recorder ?? _console.Value; + public static IAnsiConsole Console + { + get + { + return _recorder ?? _console.Value; + } + set + { + _console = new Lazy(() => value); + + if (_recorder != null) + { + // Recreate the recorder + _recorder = _recorder.Clone(value); + } + + Created = true; + } + } /// /// Gets the . diff --git a/src/Spectre.Console/Recorder.cs b/src/Spectre.Console/Recorder.cs index c96be0c..5893b4b 100644 --- a/src/Spectre.Console/Recorder.cs +++ b/src/Spectre.Console/Recorder.cs @@ -67,6 +67,13 @@ namespace Spectre.Console _console.Write(segments); } + internal Recorder Clone(IAnsiConsole console) + { + var recorder = new Recorder(console); + recorder.Recorded.AddRange(Recorded); + return recorder; + } + /// /// Records the specified segments. ///