44 lines
1.2 KiB
C#
44 lines
1.2 KiB
C#
using Spectre.Console;
|
|
|
|
namespace LazyBear.MCP.TUI;
|
|
|
|
internal static class UiMetrics
|
|
{
|
|
public static int ConsoleWidth => Math.Max(ReadConsoleSize(ReadConsoleWidth, () => AnsiConsole.Profile.Width, 80), 1);
|
|
public static int ConsoleHeight => Math.Max(ReadConsoleSize(ReadConsoleHeight, () => AnsiConsole.Profile.Height, 24), 1);
|
|
|
|
private static int ReadConsoleSize(Func<int> consoleReader, Func<int> profileReader, int fallback)
|
|
{
|
|
try
|
|
{
|
|
var consoleValue = consoleReader();
|
|
if (consoleValue > 0)
|
|
{
|
|
return consoleValue;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// Игнорируем и пробуем fallback через профиль Spectre.
|
|
}
|
|
|
|
try
|
|
{
|
|
var profileValue = profileReader();
|
|
if (profileValue > 0)
|
|
{
|
|
return profileValue;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// Игнорируем и используем значение по умолчанию.
|
|
}
|
|
|
|
return fallback;
|
|
}
|
|
|
|
private static int ReadConsoleWidth() => Console.WindowWidth;
|
|
private static int ReadConsoleHeight() => Console.WindowHeight;
|
|
}
|