diff --git a/src/Spectre.Console.Tests/Expectations/Live/Status/Render_LongText.Output.verified.txt b/src/Spectre.Console.Tests/Expectations/Live/Status/Render_LongText.Output.verified.txt
new file mode 100644
index 000000000..fda8dbfd3
--- /dev/null
+++ b/src/Spectre.Console.Tests/Expectations/Live/Status/Render_LongText.Output.verified.txt
@@ -0,0 +1,9 @@
+
+* Building AppHost...
+ playground\HealthChecks\HealthChecksSa
+ ndbox.AppHost\AppHost.csproj
+
+* Building AppHost...
+ playground\HealthChecks\HealthChecksSa
+ ndbox.AppHost\AppHost.csproj
+
\ No newline at end of file
diff --git a/src/Spectre.Console.Tests/Expectations/Public_API.Output.verified.txt b/src/Spectre.Console.Tests/Expectations/Public_API.Output.verified.txt
index 7f8d6e015..14d4f7423 100644
--- a/src/Spectre.Console.Tests/Expectations/Public_API.Output.verified.txt
+++ b/src/Spectre.Console.Tests/Expectations/Public_API.Output.verified.txt
@@ -3138,6 +3138,7 @@
public TaskDescriptionColumn() { }
public Spectre.Console.Justify Alignment { get; set; }
protected override bool NoWrap { get; }
+ public bool Wrap { get; set; }
public override Spectre.Console.Rendering.IRenderable Render(Spectre.Console.Rendering.RenderOptions options, Spectre.Console.ProgressTask task, System.TimeSpan deltaTime) { }
}
[System.Diagnostics.DebuggerDisplay("{_text,nq}")]
diff --git a/src/Spectre.Console.Tests/Unit/Live/StatusTests.cs b/src/Spectre.Console.Tests/Unit/Live/StatusTests.cs
index 5bec6cfcd..9c22da9bb 100644
--- a/src/Spectre.Console.Tests/Unit/Live/StatusTests.cs
+++ b/src/Spectre.Console.Tests/Unit/Live/StatusTests.cs
@@ -48,4 +48,29 @@ public Task Should_Render_Status_Correctly()
// Then
return Verifier.Verify(console.Output);
}
+
+ [Fact]
+ [Expectation("Render_LongText")]
+ [GitHubIssue("https://github.com/spectreconsole/spectre.console/issues/2152")]
+ public Task Should_Wrap_Status_Text_That_Exceeds_The_Console_Width()
+ {
+ // Given
+ var console = new TestConsole()
+ .Width(40)
+ .Interactive();
+
+ var status = new Status(console)
+ {
+ AutoRefresh = false,
+ Spinner = new DummySpinner1(),
+ };
+
+ // When
+ status.Start(
+ "Building AppHost... playground\\HealthChecks\\HealthChecksSandbox.AppHost\\AppHost.csproj",
+ ctx => ctx.Refresh());
+
+ // Then
+ return Verifier.Verify(console.Output);
+ }
}
\ No newline at end of file
diff --git a/src/Spectre.Console/Live/Progress/Columns/TaskDescriptionColumn.cs b/src/Spectre.Console/Live/Progress/Columns/TaskDescriptionColumn.cs
index 4e3c39ff5..2852ea44e 100644
--- a/src/Spectre.Console/Live/Progress/Columns/TaskDescriptionColumn.cs
+++ b/src/Spectre.Console/Live/Progress/Columns/TaskDescriptionColumn.cs
@@ -6,7 +6,14 @@ namespace Spectre.Console;
public sealed class TaskDescriptionColumn : ProgressColumn
{
///
- protected internal override bool NoWrap => true;
+ protected internal override bool NoWrap => !Wrap;
+
+ ///
+ /// Gets or sets a value indicating whether the description should wrap
+ /// onto multiple lines when it's wider than the available space.
+ /// Defaults to false, which truncates the description with an ellipsis.
+ ///
+ public bool Wrap { get; set; }
///
/// Gets or sets the alignment of the task description.
@@ -17,6 +24,8 @@ public sealed class TaskDescriptionColumn : ProgressColumn
public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)
{
var text = task.Description?.RemoveNewLines()?.Trim();
- return new Markup(text ?? string.Empty).Overflow(Overflow.Ellipsis).Justify(Alignment);
+ return new Markup(text ?? string.Empty)
+ .Overflow(Wrap ? Overflow.Fold : Overflow.Ellipsis)
+ .Justify(Alignment);
}
}
\ No newline at end of file
diff --git a/src/Spectre.Console/Live/Status/Status.cs b/src/Spectre.Console/Live/Status/Status.cs
index c7460621f..f428e07ea 100644
--- a/src/Spectre.Console/Live/Status/Status.cs
+++ b/src/Spectre.Console/Live/Status/Status.cs
@@ -105,7 +105,11 @@ public async Task StartAsync(string status, Func> f
progress.Columns(new ProgressColumn[]
{
spinnerColumn,
- new TaskDescriptionColumn(),
+ new TaskDescriptionColumn
+ {
+ Wrap = true,
+ Alignment = Justify.Left,
+ },
});
return await progress.StartAsync(async ctx =>