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.
///