Support setting the static console

This commit is contained in:
Patrik Svensson 2021-02-28 23:11:35 +01:00 committed by Phil Scott
parent bff3438a5a
commit 29e6e34f83
3 changed files with 43 additions and 15 deletions

View File

@ -13,7 +13,10 @@ namespace Spectre.Console
/// </summary> /// </summary>
public static void Record() public static void Record()
{ {
_recorder = new Recorder(_console.Value); if (_recorder == null)
{
_recorder = new Recorder(Console);
}
} }
/// <summary> /// <summary>

View File

@ -7,7 +7,9 @@ namespace Spectre.Console
/// </summary> /// </summary>
public static partial class AnsiConsole public static partial class AnsiConsole
{ {
private static readonly Lazy<IAnsiConsole> _console = new Lazy<IAnsiConsole>(() => private static Recorder? _recorder;
private static Lazy<IAnsiConsole> _console = new Lazy<IAnsiConsole>(
() =>
{ {
var console = Create(new AnsiConsoleSettings var console = Create(new AnsiConsoleSettings
{ {
@ -20,12 +22,28 @@ namespace Spectre.Console
return console; return console;
}); });
private static Recorder? _recorder;
/// <summary> /// <summary>
/// Gets the underlying <see cref="IAnsiConsole"/>. /// Gets or sets the underlying <see cref="IAnsiConsole"/>.
/// </summary> /// </summary>
public static IAnsiConsole Console => _recorder ?? _console.Value; public static IAnsiConsole Console
{
get
{
return _recorder ?? _console.Value;
}
set
{
_console = new Lazy<IAnsiConsole>(() => value);
if (_recorder != null)
{
// Recreate the recorder
_recorder = _recorder.Clone(value);
}
Created = true;
}
}
/// <summary> /// <summary>
/// Gets the <see cref="IAnsiConsoleCursor"/>. /// Gets the <see cref="IAnsiConsoleCursor"/>.

View File

@ -67,6 +67,13 @@ namespace Spectre.Console
_console.Write(segments); _console.Write(segments);
} }
internal Recorder Clone(IAnsiConsole console)
{
var recorder = new Recorder(console);
recorder.Recorded.AddRange(Recorded);
return recorder;
}
/// <summary> /// <summary>
/// Records the specified segments. /// Records the specified segments.
/// </summary> /// </summary>