Same look everywhere: the guest table sits in a "Guests" frame with the active context in its bottom border. Every dialog is a centred box with a title, labelled fields and the buttons bottom right: confirm (titled by the action), edit resources, switch context, back up and edit network.
Enter opens the info screen and replaces i. The footer shows "⏎ Info". The hint comes from the guest table's own binding, because a priority binding at app level would take Enter away from buttons and lists in the dialogs.
Edit moved into the info screen: editing cores, memory and disk is now e in the info screen, not on the main screen. When the edit dialog closes, you are back on the info screen.
Bugs fixed
The network dialog hid most of its fields. In the rows with several widgets, Textual gave each Select a width of 1 and each Input 100 %, which pushed bridge, firewall, the IPv4/IPv6 mode selects and the gateways off-screen. Every widget in a row now has an explicit width, and a test checks that each field is inside the screen.
Markup in names crashed the app. A guest name or backup note like a[/b] crashed the guest table and the dialogs, because DataTable cells and border titles were parsed as markup. They are now plain text. The crash in the table predates this PR; the new test exposed it.
Verification
268 tests pass.
ruff check and ruff format --check report no issues.
betterleaks found no secrets.
Screenshots of the main screen and all dialogs, before and after. The "after" ones use test data, because the cluster's hostname did not resolve on the network in use at the time.
Known limit: at 80x24 the network dialog is 25-26 rows tall, so it scrolls (Tab reaches Apply/Cancel, Escape closes it).
## What
- **Same look everywhere:** the guest table sits in a "Guests" frame with the active context in its bottom border. Every dialog is a centred box with a title, labelled fields and the buttons bottom right: confirm (titled by the action), edit resources, switch context, back up and edit network.
- **Enter opens the info screen** and replaces `i`. The footer shows "⏎ Info". The hint comes from the guest table's own binding, because a priority binding at app level would take Enter away from buttons and lists in the dialogs.
- **Edit moved into the info screen:** editing cores, memory and disk is now `e` in the info screen, not on the main screen. When the edit dialog closes, you are back on the info screen.
## Bugs fixed
- **The network dialog hid most of its fields.** In the rows with several widgets, Textual gave each `Select` a width of 1 and each `Input` 100 %, which pushed bridge, firewall, the IPv4/IPv6 mode selects and the gateways off-screen. Every widget in a row now has an explicit width, and a test checks that each field is inside the screen.
- **Markup in names crashed the app.** A guest name or backup note like `a[/b]` crashed the guest table and the dialogs, because `DataTable` cells and border titles were parsed as markup. They are now plain text. The crash in the table predates this PR; the new test exposed it.
## Verification
- 268 tests pass.
- `ruff check` and `ruff format --check` report no issues.
- `betterleaks` found no secrets.
- Screenshots of the main screen and all dialogs, before and after. The "after" ones use test data, because the cluster's hostname did not resolve on the network in use at the time.
- Known limit: at 80x24 the network dialog is 25-26 rows tall, so it scrolls (Tab reaches Apply/Cancel, Escape closes it).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The info screen's style now applies everywhere. The guest table sits
in a "Guests" frame with the active context in its bottom border.
Every dialog is a centred box with a title, labelled fields and the
buttons bottom right: confirm (titled by the action), edit resources,
switch context, back up and edit network.
Fixed:
- The network dialog hid most of its fields. In Horizontal rows
Textual gave Select a width of 1 and Input 100 %, which pushed
bridge, firewall, the IP mode selects and the gateways off-screen.
Every field in a row now has an explicit width.
- A guest name or note containing markup, such as "a[/b]", crashed the
guest table and the dialogs, because DataTable cells and border
titles were parsed as markup. They are now plain text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Enter on a guest now opens its info screen, replacing i. The guest
table shows Enter as "Info" in the footer. A priority binding at app
level would have taken Enter away from buttons and lists in the
dialogs, so the hint comes from the table's own binding instead.
Editing cores, memory and disk moved from the main screen into the
info screen (key e). When the edit dialog closes, you are back on the
info screen. Test helpers that pressed i or e on the main screen now
go through Enter, because the requirement changed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
i. The footer shows "⏎ Info". The hint comes from the guest table's own binding, because a priority binding at app level would take Enter away from buttons and lists in the dialogs.ein the info screen, not on the main screen. When the edit dialog closes, you are back on the info screen.Bugs fixed
Selecta width of 1 and eachInput100 %, which pushed bridge, firewall, the IPv4/IPv6 mode selects and the gateways off-screen. Every widget in a row now has an explicit width, and a test checks that each field is inside the screen.a[/b]crashed the guest table and the dialogs, becauseDataTablecells and border titles were parsed as markup. They are now plain text. The crash in the table predates this PR; the new test exposed it.Verification
ruff checkandruff format --checkreport no issues.betterleaksfound no secrets.Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com