Repository navigation
Mobile: full-screen terminal, a Type box, and a Sessions screen - #1495
Merged
Merged
Conversation
The bottom input modes (Sessions, Recent, Type, Draft) and their fixed keyboard reserve are gone. The terminal now fills the screen above one bar: Gestures, Select, Mouse, and Type. - Type opens a composer at the top: a text field, a Password checkbox, Cancel, and Send. Send writes the text through the paste path (bracketed when the app asks), then Enter; a password is written raw. Soft-keyboard keystrokes are never sent live, since autocorrect made them unreliable. - While the composer is open the terminal pans up above the OS keyboard instead of resizing, so the PTY keeps its size. - A physical keyboard types straight into the terminal while the composer is closed. - Minimize opens a full-screen Sessions screen, with a Settings page for terminal font size and theme. The one-time page keeps nothing. - MobileWall's header is pane chrome: in Gestures and Mouse modes the host's capture no longer swallows its Minimize, Kill, and TODO buttons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Any button or link inside the gesture host takes its own press, replacing the MobileWall-only data-mobile-pane-chrome opt-out. - Composer owns its text and Password checkbox, so a keystroke re-renders only the box; the parent keeps just whether it is open. - Keyboard pan subscribes through subscribeOverlayViewport and skips unchanged insets instead of re-rendering on every viewport event. - Physical keys map through a table onto MOBILE_TERMINAL_KEY_SEQUENCES. - useThemeChoice is shared by ThemePicker and MobileSettings. - PocketWall takes one persist prop instead of restoreTheme plus persistSettings; usePocketTheme syncs browser chrome on any theme change. - Font size persists through local-json-store; Cancel and Send use modalActionButton; one scroll container on the Sessions screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Settings: the desktop theme dropdown first (showing the picked theme), then font size over a live terminal-styled sample. - The header's Session title opens the Sessions screen; Minimize is gone. The Settings button is labelled. - Every top bar is 44px, its controls full-height touch targets. - A cancelled Type draft comes back on the next Type; Send clears it, and a password is never kept. - Pane-header labels no longer clip descenders (desktop and mobile). - The playground fills the dynamic viewport, so iOS Safari's toolbar no longer hides the mode bar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Kill was 44x16: `HeaderActionButton`'s wrapper collapsed its `h-full`. - The kept draft derives in one place, so a password can't slip through. - `useThemeChoice` folds back into `ThemePicker`, its only user; the `settings-dialog` variant is now `row`, which the phone uses too. - `MOBILE_BAR_HEIGHT_CLASS` replaces two heights kept in step by a comment. - `ThemePicker` and `ShellPicker` own their `min-w-0`, so parents stop reaching into their markup. - The header title renders once and reaches the right edge in Pocket. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # lib/src/components/MobileTerminalUi.tsx # scripts/spec-word-budgets.json
Deploying mouseterm with
|
| Latest commit: |
07920f6
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://41eed3a6.mouseterm.pages.dev |
| Branch Preview URL: | https://mobile-refresh.mouseterm.pages.dev |
dormouse-bot
reviewed
Nov 1, 2026
dormouse-bot
left a comment
Collaborator
There was a problem hiding this comment.
A physical keyboard's ⌘V no longer reaches the terminal outside the composer; see the inline comment.
Removing the hidden textarea removed the only receiver of a `paste` event, so Command+V did nothing while the composer was closed. A window listener beside the hardware-key one takes it, on the same targets and gates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dormouse-bot
approved these changes
Nov 1, 2026
This was referenced Nov 2, 2026
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.
Makes the mobile composition (Pocket, the one-time page, and the Pocket playground) full screen, with its controls in one bar at the bottom. The old layout had mode rows above and below the terminal, plus a Minimize button whose purpose wasn't clear.
Fixes that reach beyond mobile
gandp, on desktop too.leading-nonebecameleading-tight.100vh, which on iOS Safari left the bottom bar under the toolbar. It now usesdvh, as Pocket and the one-time page already did.ThemePickerandShellPickerown theirmin-w-0, replacing the[&>div]:min-w-0selector in the Settings dialog's rows.ThemePicker'ssettings-dialogvariant is renamedrow, since the phone uses it too.onSessionMinimizeonMobileWallis nowonShowSessions, andxtermfont size can be overridden throughsetTerminalFontSize.Testing
main, but I didn't re-check it in a browser after the merge.NetworkSettings, whose only diff is the date on its "Paired" line, which this PR doesn't touch.pastewith nothing editable focused, which is only covered by synthetic events.🤖 Generated with Claude Code