resize terminal

This commit is contained in:
Matt Parker
2025-08-07 01:59:10 +10:00
parent ffbbca3c9c
commit 61a7ea625b
5 changed files with 46 additions and 15 deletions

View File

@@ -1,6 +1,6 @@
<div style="@GetStyle">
<span style="@GetStyle">
@ChildContent
</div>
</span>
@code {
[Parameter, EditorRequired]
@@ -9,5 +9,5 @@
[Parameter, EditorRequired]
public bool Visible { get; set; }
private string GetStyle => Visible ? "display: inherit" : "display: none";
private string GetStyle => Visible ? "display: inherit; height: 100%" : "display: none";
}

View File

@@ -1,4 +1,7 @@
<MudText>Run</MudText>
<MudStack Style="height: 100%">
<MudText>Run</MudText>
</MudStack>
@code {

View File

@@ -10,9 +10,9 @@
}
</style>
<div style="width: 100%">
<div style="width: 100%; height: 100%; overflow: auto">
<MudText>Terminal</MudText>
<Xterm @ref="@_terminalRef" Style="height: 100%" Options="@_options"/>
<Xterm @ref="@_terminalRef" Options="@_options" Style="height: calc(100% - 24px)" Addons="@_addons" OnFirstRender="@OnFirstRender"/>
</div>
@code {
@@ -34,6 +34,8 @@
},
};
private HashSet<string> _addons = ["addon-fit"];
protected override async Task OnInitializedAsync()
{
BuildService.BuildStarted += ClearPreviousOutput;
@@ -60,4 +62,28 @@
}
public void Dispose() => BuildService.BuildStarted -= ClearPreviousOutput;
private async Task OnFirstRender()
{
await _terminalRef.Addon("addon-fit").InvokeVoidAsync("fit");
_ = Task.Run(async () =>
{
try
{
while (true)
{
await Task.Delay(500).ConfigureAwait(false);
await InvokeAsync(async () =>
{
await _terminalRef.Addon("addon-fit").InvokeVoidAsync("fit");
});
}
}
catch (Exception e)
{
await DispatchExceptionAsync(e);
}
});
}
}

View File

@@ -70,8 +70,8 @@
</div>
</MudDrawerContainer>
</MudPaper>
<div>
@if (_solutionFilePath is not null && _selectedBottomPanel is not null)
<div style="height: 30%">
@if (_solutionFilePath is not null)
{
<DisplayNoneComponent Visible="@(_selectedBottomPanel is BottomPanelType.Run)">
<RunPanel />

View File

@@ -19,12 +19,14 @@
<a class="dismiss">🗙</a>
</div>
<script defer src="scripts2.js"></script>
<script defer src="_content/XtermBlazor/XtermBlazor.min.js"></script>
<script defer src="_content/BlazorMonaco/jsInterop.js"></script>
<script defer src="_content/BlazorMonaco/lib/monaco-editor/min/vs/loader.js"></script>
<script defer src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>
<script defer src="_content/MudBlazor/MudBlazor.min.js"></script>
<script defer src="_framework/blazor.webview.js"></script>
<script src="scripts2.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@xterm/addon-fit@0.10.0/lib/addon-fit.min.js"></script>
<script src="_content/BlazorMonaco/jsInterop.js"></script>
<script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/loader.js"></script>
<script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
<script src="_content/XtermBlazor/XtermBlazor.min.js"></script>
<script>XtermBlazor.registerAddons({"addon-fit": new FitAddon.FitAddon()});</script>
<script src="_framework/blazor.webview.js"></script>
</body>
</html>