Skip to content

Commit 6800b73

Browse files
BobSilentjonsequitur
authored andcommitted
explicitly render column space to improve rendering in plain text
1 parent c671fa1 commit 6800b73

File tree

4 files changed

+55
-6
lines changed

4 files changed

+55
-6
lines changed

src/System.CommandLine.Rendering.Tests/TableRenderingTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ public void A_row_is_written_for_each_item_and_a_header_for_each_column(OutputMo
4848
lines
4949
.Should()
5050
.BeEquivalentSequenceTo(
51-
Cell("Option ", 0, 0), Cell(" ", 13, 0),
52-
Cell("-s ", 0, 1), Cell("a short option", 13, 1),
53-
Cell("--very-long", 0, 2), Cell("a long option ", 13, 2));
51+
Cell("Option ", 0, 0), Cell(" ", 11, 0), Cell(" ", 13, 0),
52+
Cell("-s ", 0, 1), Cell(" ", 11, 1), Cell("a short option", 13, 1),
53+
Cell("--very-long", 0, 2), Cell(" ", 11, 2), Cell("a long option ", 13, 2));
5454
}
5555

5656
[Fact]
@@ -70,9 +70,9 @@ public void A_row_is_written_for_each_item_and_a_header_for_each_column_in_file_
7070
.ToString()
7171
.Should()
7272
.Be(
73-
"Option " + NewLine +
74-
"-s a short option" + NewLine +
75-
"--very-longa long option ");
73+
"Option " + NewLine +
74+
"-s a short option" + NewLine +
75+
"--very-long a long option ");
7676
}
7777

7878
[Theory]

src/System.CommandLine.Rendering.Tests/Views/GridViewTests.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ public void Column_width_definition_size_calculation_according_priority_fixed_th
7575
terminal.Events.Should().BeEquivalentSequenceTo(
7676
new TestTerminal.CursorPositionChanged(new Point(0, 0)),
7777
new TestTerminal.ContentWritten("brown fox"),
78+
new TestTerminal.CursorPositionChanged(new Point(9, 0)),
79+
new TestTerminal.ContentWritten(" "),
7880
new TestTerminal.CursorPositionChanged(new Point(11, 0)),
7981
new TestTerminal.ContentWritten("jumped "));
8082
}
@@ -128,10 +130,16 @@ public void Column_width_definition_is_preserved_even_defintion_is_mixed_for_sub
128130
terminal.Events.Should().BeEquivalentSequenceTo(
129131
new TestTerminal.CursorPositionChanged(new Point(0, 0)),
130132
new TestTerminal.ContentWritten("The quick"),
133+
new TestTerminal.CursorPositionChanged(new Point(9, 0)),
134+
new TestTerminal.ContentWritten(" "),
131135
new TestTerminal.CursorPositionChanged(new Point(11, 0)),
132136
new TestTerminal.ContentWritten("brown fox"),
137+
new TestTerminal.CursorPositionChanged(new Point(20, 0)),
138+
new TestTerminal.ContentWritten(" "),
133139
new TestTerminal.CursorPositionChanged(new Point(22, 0)),
134140
new TestTerminal.ContentWritten("jumped"),
141+
new TestTerminal.CursorPositionChanged(new Point(28, 0)),
142+
new TestTerminal.ContentWritten(" "),
135143
new TestTerminal.CursorPositionChanged(new Point(30, 0)),
136144
new TestTerminal.ContentWritten("over the sleepy"));
137145
}
@@ -155,10 +163,16 @@ public void Column_width_definition_is_preserved_even_defintion_is_mixed_for_sub
155163
terminal.Events.Should().BeEquivalentSequenceTo(
156164
new TestTerminal.CursorPositionChanged(new Point(0, 0)),
157165
new TestTerminal.ContentWritten("The quick "),
166+
new TestTerminal.CursorPositionChanged(new Point(10, 0)),
167+
new TestTerminal.ContentWritten(" "),
158168
new TestTerminal.CursorPositionChanged(new Point(12, 0)),
159169
new TestTerminal.ContentWritten("brown fox" + new string(' ', 71)),
170+
new TestTerminal.CursorPositionChanged(new Point(92, 0)),
171+
new TestTerminal.ContentWritten(" "),
160172
new TestTerminal.CursorPositionChanged(new Point(94, 0)),
161173
new TestTerminal.ContentWritten("jumped "),
174+
new TestTerminal.CursorPositionChanged(new Point(104, 0)),
175+
new TestTerminal.ContentWritten(" "),
162176
new TestTerminal.CursorPositionChanged(new Point(106, 0)),
163177
new TestTerminal.ContentWritten("over the sleepy"));
164178
}
@@ -185,6 +199,10 @@ public void Star_grid_lays_out_in_even_grid(OutputMode outputMode)
185199
new TestTerminal.ContentWritten("The "),
186200
new TestTerminal.CursorPositionChanged(new Point(0, 1)),
187201
new TestTerminal.ContentWritten("quick"),
202+
new TestTerminal.CursorPositionChanged(new Point(5, 0)),
203+
new TestTerminal.ContentWritten(" "),
204+
new TestTerminal.CursorPositionChanged(new Point(5, 1)),
205+
new TestTerminal.ContentWritten(" "),
188206
new TestTerminal.CursorPositionChanged(new Point(7, 0)),
189207
new TestTerminal.ContentWritten("brown"),
190208
new TestTerminal.CursorPositionChanged(new Point(7, 1)),
@@ -193,6 +211,10 @@ public void Star_grid_lays_out_in_even_grid(OutputMode outputMode)
193211
new TestTerminal.ContentWritten("jumpe"),
194212
new TestTerminal.CursorPositionChanged(new Point(0, 3)),
195213
new TestTerminal.ContentWritten(" "),
214+
new TestTerminal.CursorPositionChanged(new Point(5, 2)),
215+
new TestTerminal.ContentWritten(" "),
216+
new TestTerminal.CursorPositionChanged(new Point(5, 3)),
217+
new TestTerminal.ContentWritten(" "),
196218
new TestTerminal.CursorPositionChanged(new Point(7, 2)),
197219
new TestTerminal.ContentWritten("over "),
198220
new TestTerminal.CursorPositionChanged(new Point(7, 3)),
@@ -221,12 +243,18 @@ public void Fixed_grid_lays_out_fixed_rows_and_columns(OutputMode outputMode)
221243
.BeEquivalentSequenceTo(
222244
new TestTerminal.CursorPositionChanged(new Point(0, 0)),
223245
new TestTerminal.ContentWritten("The "),
246+
new TestTerminal.CursorPositionChanged(new Point(6, 0)),
247+
new TestTerminal.ContentWritten(" "),
224248
new TestTerminal.CursorPositionChanged(new Point(8, 0)),
225249
new TestTerminal.ContentWritten("brow"),
226250
new TestTerminal.CursorPositionChanged(new Point(0, 1)),
227251
new TestTerminal.ContentWritten("jumped"),
228252
new TestTerminal.CursorPositionChanged(new Point(0, 2)),
229253
new TestTerminal.ContentWritten("over "),
254+
new TestTerminal.CursorPositionChanged(new Point(6, 1)),
255+
new TestTerminal.ContentWritten(" "),
256+
new TestTerminal.CursorPositionChanged(new Point(6, 2)),
257+
new TestTerminal.ContentWritten(" "),
230258
new TestTerminal.CursorPositionChanged(new Point(8, 1)),
231259
new TestTerminal.ContentWritten("the "),
232260
new TestTerminal.CursorPositionChanged(new Point(8, 2)),
@@ -253,10 +281,14 @@ public void Size_to_content_grid_with_wide_region_adjusts_to_content_size(Output
253281
terminal.Events.Should().BeEquivalentSequenceTo(
254282
new TestTerminal.CursorPositionChanged(new Point(0, 0)),
255283
new TestTerminal.ContentWritten("The quick "),
284+
new TestTerminal.CursorPositionChanged(new Point(11, 0)),
285+
new TestTerminal.ContentWritten(" "),
256286
new TestTerminal.CursorPositionChanged(new Point(13, 0)),
257287
new TestTerminal.ContentWritten("brown fox "),
258288
new TestTerminal.CursorPositionChanged(new Point(0, 1)),
259289
new TestTerminal.ContentWritten("jumped over"),
290+
new TestTerminal.CursorPositionChanged(new Point(11, 1)),
291+
new TestTerminal.ContentWritten(" "),
260292
new TestTerminal.CursorPositionChanged(new Point(13, 1)),
261293
new TestTerminal.ContentWritten("the sleepy"));
262294
}
@@ -283,12 +315,18 @@ public void Size_to_content_grid_with_narrow_region_increases_row_height(OutputM
283315
new TestTerminal.ContentWritten("The quick "),
284316
new TestTerminal.CursorPositionChanged(new Point(0, 1)),
285317
new TestTerminal.ContentWritten(" "),
318+
new TestTerminal.CursorPositionChanged(new Point(11, 0)),
319+
new TestTerminal.ContentWritten(" "),
320+
new TestTerminal.CursorPositionChanged(new Point(11, 1)),
321+
new TestTerminal.ContentWritten(" "),
286322
new TestTerminal.CursorPositionChanged(new Point(13, 0)),
287323
new TestTerminal.ContentWritten("brown"),
288324
new TestTerminal.CursorPositionChanged(new Point(13, 1)),
289325
new TestTerminal.ContentWritten("fox "),
290326
new TestTerminal.CursorPositionChanged(new Point(0, 2)),
291327
new TestTerminal.ContentWritten("jumped over"),
328+
new TestTerminal.CursorPositionChanged(new Point(11, 2)),
329+
new TestTerminal.ContentWritten(" "),
292330
new TestTerminal.CursorPositionChanged(new Point(13, 2)),
293331
new TestTerminal.ContentWritten("the s"));
294332
}

src/System.CommandLine.Rendering/TestTerminal.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System.Collections.Generic;
55
using System.CommandLine.IO;
6+
using System.Diagnostics;
67
using System.Drawing;
78
using System.Text;
89
using System.Text.RegularExpressions;
@@ -291,6 +292,7 @@ public class ColorReset : ConsoleEvent
291292
{
292293
}
293294

295+
[DebuggerDisplay(nameof(CursorPositionChanged) + ": {" + nameof(Position) + ", nq}")]
294296
public class CursorPositionChanged : ConsoleEvent
295297
{
296298
public CursorPositionChanged(Point position)
@@ -301,6 +303,7 @@ public CursorPositionChanged(Point position)
301303
public Point Position { get; }
302304
}
303305

306+
[DebuggerDisplay(nameof(ContentWritten) + ": {" + nameof(Content) + "}")]
304307
public class ContentWritten : ConsoleEvent
305308
{
306309
public ContentWritten(string text)
@@ -311,6 +314,7 @@ public ContentWritten(string text)
311314
public string Content { get; }
312315
}
313316

317+
[DebuggerDisplay(nameof(ForegroundColorChanged) + ": {" + nameof(ForegroundColor) + ", nq}")]
314318
public class ForegroundColorChanged : ConsoleEvent
315319
{
316320
public ForegroundColorChanged(ConsoleColor foregroundColor)

src/System.CommandLine.Rendering/Views/GridView.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,13 @@ public override void Render(ConsoleRenderer renderer, Region region)
114114
var contentSize = new Size(sizes[column, row].Width - paddingWidth, sizes[column, row].Height);
115115
child.Render(renderer, new Region(left, top, contentSize));
116116

117+
if (paddingWidth > 0)
118+
{
119+
// Explicit render the space between the columns to improve rendering in plain text
120+
var paddingSize = new Size(paddingWidth, sizes[column, row].Height);
121+
renderer.RenderToRegion(TextSpan.Empty(), new Region(left + contentSize.Width, top, paddingSize));
122+
}
123+
117124
left += sizes[column, row].Width;
118125
maxRowHeight = Math.Max(maxRowHeight, sizes[column, row].Height);
119126
}

0 commit comments

Comments
 (0)