Skip to content

Pick which Mac display a one-monitor session shows (T1-MON-02) - #6

Open
rvegajr wants to merge 2 commits into
docs-display-pickerfrom
t1-mon-02-pick-display
Open

rvegajr wants to merge 2 commits into
docs-display-pickerfrom
t1-mon-02-pick-display

Conversation

@rvegajr

@rvegajr rvegajr commented Oct 4, 2026

Copy link
Copy Markdown
Member

Stacked on #5 (adds the T1-MON-02 spec row this PR cites).

Summary

mrdpd-serve captured whichever display ScreenCaptureKit listed first, so on a multi-display Mac the iPad could miss the display you work on.

  • DisplayCatalog (FrameKit, pure) letters Mac displays A, B, C… left to right, then top to bottom, and marks the main one.
  • SCKFrameSource captures the chosen display, defaulting to the main display. An unknown letter throws unknownDisplay with the letters that exist.
  • mrdpd-serve --display A|B|C|main (just serve display=C). At startup it lists every display with its name, size and origin, and warns when the served one has no menu bar ("Displays have separate Spaces" off).
  • New live check t1_mon_02_fastpath_mouse_lands_on_served_display (just test-inject-display): a FastPath move to the session center lands on the served display's center, and the cursor is restored afterward.

No new C ABI. One display per session, as before.

Test plan

  • just test recipes: abi-tests, mrdpd-engine tests, swift test (82 tests, 9 TCC skips)
  • just test-local: 4/4 SCKFrameSourceTests (default main, chosen letter, unknown letter, contract) plus CGEventInputSink
  • Live on a 3-display Mac (two 4K displays above a MacBook): --display A and the default (main) both land at the served display's center; --display D exits with "this Mac has A, B, C"
  • iPad Windows App: serve the display you work on during the M6 re-test (just serve host=<tailscale-ip> display=<letter>)

Made with Cursor

rvegajr and others added 2 commits October 4, 2026 01:42
mrdpd-serve captured whichever display SCK listed first, so on a
multi-display Mac the iPad could miss the display you work on.

- DisplayCatalog letters displays A, B, C... left to right (then top to
  bottom) and marks the main one; DisplayChoice is .main or .letter.
- SCKFrameSource captures the chosen display (default main) and throws
  unknownDisplay with the letters that exist.
- ServeArgs takes --display A|B|C|main; just serve display=C.
- mrdpd-serve lists every display with its name at startup and warns
  when the served one has no menu bar (separate Spaces off).
- serve_inject.rs: a FastPath move to the session center lands on the
  served display's center (just test-inject-display).

No new C ABI. just test green; just test-local and the live check pass
on a 3-display Mac.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant