mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-04-16 17:02:51 +08:00
Fallback to default buffer size
Also fixes a bug when using Spectre.Console in GitHub Actions.
This commit is contained in:
parent
ab73d16583
commit
a16daade6c
10
.github/workflows/ci.yaml
vendored
10
.github/workflows/ci.yaml
vendored
@ -31,6 +31,16 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
dotnet-version: 3.1.301
|
dotnet-version: 3.1.301
|
||||||
|
|
||||||
|
- name: Integration Tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
dotnet tool restore
|
||||||
|
dotnet example diagnostic
|
||||||
|
dotnet example table
|
||||||
|
dotnet example grid
|
||||||
|
dotnet example panel
|
||||||
|
dotnet example colors
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
@ -13,6 +13,12 @@
|
|||||||
"commands": [
|
"commands": [
|
||||||
"gpr"
|
"gpr"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"dotnet-example": {
|
||||||
|
"version": "0.8.0",
|
||||||
|
"commands": [
|
||||||
|
"dotnet-example"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,9 +2,44 @@ using Spectre.Console;
|
|||||||
|
|
||||||
namespace ColorExample
|
namespace ColorExample
|
||||||
{
|
{
|
||||||
class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
if (AnsiConsole.Capabilities.ColorSystem == ColorSystem.NoColors)
|
||||||
|
{
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// No colors
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
AnsiConsole.WriteLine("No colors are supported.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AnsiConsole.Capabilities.Supports(ColorSystem.Legacy))
|
||||||
|
{
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// 3-BIT
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
AnsiConsole.ResetColors();
|
||||||
|
AnsiConsole.WriteLine();
|
||||||
|
AnsiConsole.MarkupLine("[bold underline]3-bit Colors[/]");
|
||||||
|
AnsiConsole.WriteLine();
|
||||||
|
|
||||||
|
for (var i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
AnsiConsole.Background = Color.FromInt32(i);
|
||||||
|
AnsiConsole.Write(string.Format(" {0,-9}", AnsiConsole.Background.ToString()));
|
||||||
|
AnsiConsole.ResetColors();
|
||||||
|
if ((i + 1) % 8 == 0)
|
||||||
|
{
|
||||||
|
AnsiConsole.WriteLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AnsiConsole.Capabilities.Supports(ColorSystem.Standard))
|
||||||
{
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
// 4-BIT
|
// 4-BIT
|
||||||
@ -25,7 +60,10 @@ namespace ColorExample
|
|||||||
AnsiConsole.WriteLine();
|
AnsiConsole.WriteLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AnsiConsole.Capabilities.Supports(ColorSystem.EightBit))
|
||||||
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
// 8-BIT
|
// 8-BIT
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
@ -49,7 +87,10 @@ namespace ColorExample
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AnsiConsole.Capabilities.Supports(ColorSystem.TrueColor))
|
||||||
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
// 24-BIT
|
// 24-BIT
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
@ -76,3 +117,4 @@ namespace ColorExample
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
14
examples/Diagnostic/Diagnostic.csproj
Normal file
14
examples/Diagnostic/Diagnostic.csproj
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<Description>Displays the capabilities of the current console.</Description>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
18
examples/Diagnostic/Program.cs
Normal file
18
examples/Diagnostic/Program.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using Spectre.Console;
|
||||||
|
|
||||||
|
namespace Diagnostic
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
AnsiConsole.MarkupLine("Color system: [bold]{0}[/]", AnsiConsole.Capabilities.ColorSystem);
|
||||||
|
AnsiConsole.MarkupLine("Supports ansi? [bold]{0}[/]", AnsiConsole.Capabilities.SupportsAnsi);
|
||||||
|
AnsiConsole.MarkupLine("Legacy console? [bold]{0}[/]", AnsiConsole.Capabilities.LegacyConsole);
|
||||||
|
AnsiConsole.WriteLine();
|
||||||
|
AnsiConsole.MarkupLine("Buffer width: [bold]{0}[/]", AnsiConsole.Console.Width);
|
||||||
|
AnsiConsole.MarkupLine("Buffer height: [bold]{0}[/]", AnsiConsole.Console.Height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,9 +7,8 @@ namespace PanelExample
|
|||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
var content = new Markup(
|
var content = new Markup(
|
||||||
"[underline]I[/] heard [underline on blue]you[/] like 📦\n\n\n\n" +
|
"[underline]I[/] heard [underline on blue]you[/] like panels\n\n\n\n" +
|
||||||
"So I put a 📦 in a 📦\n\n" +
|
"So I put a panel in a panel").Centered();
|
||||||
"😅").Centered();
|
|
||||||
|
|
||||||
AnsiConsole.Render(
|
AnsiConsole.Render(
|
||||||
new Panel(
|
new Panel(
|
||||||
|
@ -41,16 +41,16 @@ namespace TableExample
|
|||||||
table.AddColumn(new TableColumn("[blue]Bar[/]") { Alignment = Justify.Right, NoWrap = true });
|
table.AddColumn(new TableColumn("[blue]Bar[/]") { Alignment = Justify.Right, NoWrap = true });
|
||||||
|
|
||||||
// Add some rows
|
// Add some rows
|
||||||
table.AddRow("[blue][underline]Hell[/]o[/]", "World 🌍");
|
table.AddRow("[blue][underline]Hell[/]o[/]", "World");
|
||||||
table.AddRow("[yellow]Patrik [green]\"Hello World\"[/] Svensson[/]", "Was [underline]here[/]!");
|
table.AddRow("[yellow]Patrik [green]\"Hello World\"[/] Svensson[/]", "Was [underline]here[/]!");
|
||||||
table.AddEmptyRow();
|
table.AddEmptyRow();
|
||||||
table.AddRow(
|
table.AddRow(
|
||||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " +
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " +
|
||||||
"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure " +
|
"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure " +
|
||||||
"dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " +
|
"dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " +
|
||||||
"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum", "◀ Strange language");
|
"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum", "<- Strange language");
|
||||||
table.AddEmptyRow();
|
table.AddEmptyRow();
|
||||||
table.AddRow("Hej 👋", "[green]Världen[/]");
|
table.AddRow("Hej", "[green]Världen[/]");
|
||||||
|
|
||||||
AnsiConsole.Render(table);
|
AnsiConsole.Render(table);
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ namespace TableExample
|
|||||||
table.AddColumn(new TableColumn(new Panel("[u]Baz[/]").SetBorderColor(Color.Blue)));
|
table.AddColumn(new TableColumn(new Panel("[u]Baz[/]").SetBorderColor(Color.Blue)));
|
||||||
|
|
||||||
// Add some rows
|
// Add some rows
|
||||||
table.AddRow(new Text("Hello").Centered(), new Markup("[red]World![/] 🌍"), Text.Empty);
|
table.AddRow(new Text("Hello").Centered(), new Markup("[red]World![/]"), Text.Empty);
|
||||||
table.AddRow(second, new Text("Whaaat"), new Text("Lol"));
|
table.AddRow(second, new Text("Whaaat"), new Text("Lol"));
|
||||||
table.AddRow(new Markup("[blue]Hej[/]").Centered(), new Markup("[yellow]Världen![/]"), Text.Empty);
|
table.AddRow(new Markup("[blue]Hej[/]").Centered(), new Markup("[yellow]Världen![/]"), Text.Empty);
|
||||||
|
|
||||||
|
@ -25,6 +25,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grid", "..\examples\Grid\Gr
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Colors", "..\examples\Colors\Colors.csproj", "{1F51C55C-BA4C-4856-9001-0F7924FFB179}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Colors", "..\examples\Colors\Colors.csproj", "{1F51C55C-BA4C-4856-9001-0F7924FFB179}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Diagnostic", "..\examples\Diagnostic\Diagnostic.csproj", "{4337F255-88E9-4408-81A3-DF1AF58AC753}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -107,6 +109,18 @@ Global
|
|||||||
{1F51C55C-BA4C-4856-9001-0F7924FFB179}.Release|x64.Build.0 = Release|Any CPU
|
{1F51C55C-BA4C-4856-9001-0F7924FFB179}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{1F51C55C-BA4C-4856-9001-0F7924FFB179}.Release|x86.ActiveCfg = Release|Any CPU
|
{1F51C55C-BA4C-4856-9001-0F7924FFB179}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{1F51C55C-BA4C-4856-9001-0F7924FFB179}.Release|x86.Build.0 = Release|Any CPU
|
{1F51C55C-BA4C-4856-9001-0F7924FFB179}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -116,6 +130,7 @@ Global
|
|||||||
{BFF37228-B376-4ADD-9657-4E501F929713} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
{BFF37228-B376-4ADD-9657-4E501F929713} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
||||||
{C7FF6FDB-FB59-4517-8669-521C96AB7323} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
{C7FF6FDB-FB59-4517-8669-521C96AB7323} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
||||||
{1F51C55C-BA4C-4856-9001-0F7924FFB179} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
{1F51C55C-BA4C-4856-9001-0F7924FFB179} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
||||||
|
{4337F255-88E9-4408-81A3-DF1AF58AC753} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {5729B071-67A0-48FB-8B1B-275E6822086C}
|
SolutionGuid = {5729B071-67A0-48FB-8B1B-275E6822086C}
|
||||||
|
@ -38,6 +38,17 @@ namespace Spectre.Console
|
|||||||
LegacyConsole = legacyConsole;
|
LegacyConsole = legacyConsole;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether the current capabilities supports
|
||||||
|
/// the specified color system.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="colorSystem">The color system to check.</param>
|
||||||
|
/// <returns><c>true</c> if the color system is supported, otherwise <c>false</c>.</returns>
|
||||||
|
public bool Supports(ColorSystem colorSystem)
|
||||||
|
{
|
||||||
|
return (int)colorSystem <= (int)ColorSystem;
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@ namespace Spectre.Console.Internal
|
|||||||
{
|
{
|
||||||
if (_out.IsStandardOut())
|
if (_out.IsStandardOut())
|
||||||
{
|
{
|
||||||
return System.Console.BufferWidth;
|
return ConsoleHelper.GetSafeBufferWidth(Constants.DefaultBufferWidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Constants.DefaultBufferWidth;
|
return Constants.DefaultBufferWidth;
|
||||||
@ -34,7 +34,7 @@ namespace Spectre.Console.Internal
|
|||||||
{
|
{
|
||||||
if (_out.IsStandardOut())
|
if (_out.IsStandardOut())
|
||||||
{
|
{
|
||||||
return System.Console.BufferHeight;
|
return ConsoleHelper.GetSafeBufferHeight(Constants.DefaultBufferHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Constants.DefaultBufferHeight;
|
return Constants.DefaultBufferHeight;
|
||||||
|
@ -3,7 +3,7 @@ using System.Diagnostics.CodeAnalysis;
|
|||||||
|
|
||||||
namespace Spectre.Console.Internal
|
namespace Spectre.Console.Internal
|
||||||
{
|
{
|
||||||
internal static class ConsoleExtensions
|
internal static class AnsiConsoleExtensions
|
||||||
{
|
{
|
||||||
public static IDisposable PushStyle(this IAnsiConsole console, Style style)
|
public static IDisposable PushStyle(this IAnsiConsole console, Style style)
|
||||||
{
|
{
|
@ -24,7 +24,7 @@ namespace Spectre.Console.Internal
|
|||||||
{
|
{
|
||||||
if (_out.IsStandardOut())
|
if (_out.IsStandardOut())
|
||||||
{
|
{
|
||||||
return System.Console.BufferWidth;
|
return ConsoleHelper.GetSafeBufferWidth(Constants.DefaultBufferWidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Constants.DefaultBufferWidth;
|
return Constants.DefaultBufferWidth;
|
||||||
@ -37,7 +37,7 @@ namespace Spectre.Console.Internal
|
|||||||
{
|
{
|
||||||
if (_out.IsStandardOut())
|
if (_out.IsStandardOut())
|
||||||
{
|
{
|
||||||
return System.Console.BufferHeight;
|
return ConsoleHelper.GetSafeBufferHeight(Constants.DefaultBufferHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Constants.DefaultBufferHeight;
|
return Constants.DefaultBufferHeight;
|
||||||
|
44
src/Spectre.Console/Internal/Utilities/ConsoleHelper.cs
Normal file
44
src/Spectre.Console/Internal/Utilities/ConsoleHelper.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Internal
|
||||||
|
{
|
||||||
|
internal static class ConsoleHelper
|
||||||
|
{
|
||||||
|
public static int GetSafeBufferWidth(int defaultValue = Constants.DefaultBufferWidth)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var width = System.Console.BufferWidth;
|
||||||
|
if (width == 0)
|
||||||
|
{
|
||||||
|
width = defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
catch (IOException)
|
||||||
|
{
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int GetSafeBufferHeight(int defaultValue = Constants.DefaultBufferWidth)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var height = System.Console.BufferHeight;
|
||||||
|
if (height == 0)
|
||||||
|
{
|
||||||
|
height = defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
catch (IOException)
|
||||||
|
{
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user