Repository navigation
gterm: iPad split-view workspace, Magic Keyboard support, and offscreen iPad UI tests - #44
Merged
Merged
Conversation
On iPad, Hosts becomes a collapsible NavigationSplitView sidebar next to the terminal, with a Sessions menu to switch live connections without disconnecting. Keys, AI, and Settings open as sheets. Narrow windows fall back to a single column. Magic Keyboard: Command shortcuts (copy/paste/select all, font size, next/previous session, back to hosts) via UIKeyCommand; pointer drag selection, click, and hover routed to ghostty mouse events; two-finger scrollback. Hiding the software keyboard now keeps first-responder focus by swapping in a zero-height inputView so physical keys keep working. Add a gtermUITests target with an offscreen iPad runner (scripts/test-ipad-ui.py) and a loopback paramiko SSH echo fixture (scripts/ipad-ssh-fixture.py) that verifies key routing and resize. Claude-Session: https://claude.ai/code/session_011AGnzfZpK9Jvx13DcS97DZ
The app owns several windows (keyboard, text effects) and app.windows.firstMatch sometimes returned one whose frame is reported in portrait, so the restored-width assertion read 834 instead of 1210. Pick the window containing the Hosts sidebar and wait for two consecutive wide reads since the zoom animates. Claude-Session: https://claude.ai/code/session_011AGnzfZpK9Jvx13DcS97DZ
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
NavigationSplitViewsidebar beside the terminal, with a Sessions menu to switch live connections without disconnecting. Keys, AI, and Settings open as sheets. Narrow windows fall back to a single column.UIKeyCommand(copy / paste / select all, font size, next / previous session, back to Hosts); pointer click, drag selection, and hover routed to ghostty mouse events; two-finger scrollback. Hiding the software keyboard now keeps first-responder focus by swapping in a zero-heightinputView, so physical keys keep working. Control and Option combinations still go to the remote.gtermUITeststarget,scripts/test-ipad-ui.pyrunner that boots a disposable iPad Pro simulator headless, andscripts/ipad-ssh-fixture.py, a loopback paramiko SSH echo fixture that verifies key routing and resize.Verification
xcodebuild ... -scheme gterm -sdk iphonesimulator CODE_SIGNING_ALLOWED=NO build: BUILD SUCCEEDEDxcodebuild ... -scheme gtermTests test(iPhone 17 simulator): 107 tests, 0 failuresuv run --with paramiko python3 scripts/test-ipad-ui.py(iPad Pro 11-inch M5, iOS 26.5): 3 tests, 0 failuresThe resize test initially flaked because
app.windows.firstMatchsometimes matched a keyboard/effects window whose frame is reported in portrait; the second commit targets the window that contains the Hosts sidebar and waits for the zoom animation to settle.https://claude.ai/code/session_011AGnzfZpK9Jvx13DcS97DZ