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 @ChildContent
</div> </span>
@code { @code {
[Parameter, EditorRequired] [Parameter, EditorRequired]
@@ -9,5 +9,5 @@
[Parameter, EditorRequired] [Parameter, EditorRequired]
public bool Visible { get; set; } 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 { @code {

View File

@@ -10,9 +10,9 @@
} }
</style> </style>
<div style="width: 100%"> <div style="width: 100%; height: 100%; overflow: auto">
<MudText>Terminal</MudText> <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> </div>
@code { @code {
@@ -34,6 +34,8 @@
}, },
}; };
private HashSet<string> _addons = ["addon-fit"];
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
BuildService.BuildStarted += ClearPreviousOutput; BuildService.BuildStarted += ClearPreviousOutput;
@@ -60,4 +62,28 @@
} }
public void Dispose() => BuildService.BuildStarted -= ClearPreviousOutput; 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> </div>
</MudDrawerContainer> </MudDrawerContainer>
</MudPaper> </MudPaper>
<div> <div style="height: 30%">
@if (_solutionFilePath is not null && _selectedBottomPanel is not null) @if (_solutionFilePath is not null)
{ {
<DisplayNoneComponent Visible="@(_selectedBottomPanel is BottomPanelType.Run)"> <DisplayNoneComponent Visible="@(_selectedBottomPanel is BottomPanelType.Run)">
<RunPanel /> <RunPanel />

View File

@@ -19,12 +19,14 @@
<a class="dismiss">🗙</a> <a class="dismiss">🗙</a>
</div> </div>
<script defer src="scripts2.js"></script> <script src="scripts2.js"></script>
<script defer src="_content/XtermBlazor/XtermBlazor.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@xterm/addon-fit@0.10.0/lib/addon-fit.min.js"></script>
<script defer src="_content/BlazorMonaco/jsInterop.js"></script> <script src="_content/BlazorMonaco/jsInterop.js"></script>
<script defer src="_content/BlazorMonaco/lib/monaco-editor/min/vs/loader.js"></script> <script 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 src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>
<script defer src="_content/MudBlazor/MudBlazor.min.js"></script> <script src="_content/MudBlazor/MudBlazor.min.js"></script>
<script defer src="_framework/blazor.webview.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> </body>
</html> </html>