feat(terminal): full-screen mode, touch key toolbar, and copy/paste#487
Open
gvillenave wants to merge 2 commits into
Open
feat(terminal): full-screen mode, touch key toolbar, and copy/paste#487gvillenave wants to merge 2 commits into
gvillenave wants to merge 2 commits into
Conversation
Make the in-app terminal usable on touch devices: - Full-screen terminal presentation via a full-screen dialog, with the inline pane showing a tap-to-reopen placeholder so only one TerminalView is mounted against the shared session at a time. - Full-width touch key toolbar: Up, Down, Tab, Copy, Paste, and Ctrl-C (icon). Key actions are gated on the connection state. - Copy/paste: copy the xterm selection to the clipboard (UTF-16 sanitized) and bracketed-paste-aware paste, with disconnected/empty-selection guards. - Shared connection-status badge used by the inline header and full-screen page. - Reusable console surface (TerminalView + toolbar + overlay) shared by the inline pane and full-screen page, with small interior text padding. - Collapsible "listening ports" section, collapsed by default. Fix: wrap the file/port AdaptiveListTile in a transparent Material so the Material ListTile no longer trips Flutter's "background/ink may be invisible" assertion under ConduitCard's colored DecoratedBox. Tests: add coverage for clipboard actions (copy/paste, connected and disconnected) and the key toolbar (control codes routed when connected, inert when disconnected, copy stays interactive). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Reviews (1): Last reviewed commit: "feat(terminal): full-screen mode, touch ..." | Re-trigger Greptile |
The Escape key was removed from the terminal toolbar; drop its now-unused localization entry. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author
|
@cogwheel0 can you take a look? Thanks! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Makes the in-app terminal far more usable on touch devices. Adds a full-screen presentation, a touch-friendly accessory key toolbar (history, Tab, Ctrl-C), copy/paste support, a shared connection-status badge, and a collapsible "listening ports" section. Also extracts the console rendering into a reusable surface shared by the inline pane and the full-screen page, and fixes a Material assertion in the file/port list tiles.
Simulator.Screen.Recording.-.iPhone.17.-.2026-05-28.at.23.44.11.mov
Features
terminal_fullscreen_page.dart) — opens via a full-screen dialog; the inline pane shows a tap-to-reopen placeholder so only oneTerminalViewis ever mounted against the shared session at a time.terminal_key_toolbar.dart) — full-width accessory row: Up · Down · Tab · Copy · Paste · Ctrl-C (icon). Buttons scale evenly; key actions are gated on the connection state, copy/paste remain available.terminal_clipboard_actions.dart) — copy the xterm selection to the system clipboard (UTF-16 sanitized) with a "nothing selected" affordance; bracketed-paste-aware paste with a "connect to paste" guard while disconnected.terminal_connection_badge.dart) — shared pill badge (connected / connecting / error / disconnected) used by both the inline header and the full-screen page.terminal_console_surface.dart) — extracts theTerminalView+ toolbar + overlay stack into one reusable widget; adds small interior padding so command text isn't flush against the edges.terminal_tab.dart, collapsed by default to give the terminal more room.Fixes
ListTileMaterial assertion — the file/port tiles rendered anAdaptiveListTile(MaterialListTile) directly insideConduitCard's coloredDecoratedBox, tripping Flutter's "background/ink may be invisible" assertion on the Material platform. Each tile is now wrapped in a transparentMaterialso it has a proper Material ancestor (no visual change).Tests
terminal_clipboard_actions_test.dart— copy with/without a selection, paste while connected/disconnected (mocks theClipboardplatform channel).terminal_key_toolbar_test.dart— key taps route correct control codes (Tabto tab,Ctrl-Cto ETX) when connected, are inert when disconnected, and copy stays interactive while disconnected.terminal_tab_test.dartfor the now-collapsed ports section.Localization
New
app_en.arbkeys:terminalExpandAction,terminalReopenFullscreen,terminalPortsToggle,terminalKeyTab/Up/Down/Escape/CtrlC,terminalCopyAction,terminalPasteAction,terminalNothingToCopy,terminalCopied,terminalPasteWhileDisconnected.Test plan
flutter test test/features/terminal/passes (21 tests green locally)🤖 Generated with Claude Code