-
Notifications
You must be signed in to change notification settings - Fork 5
Multi-Display Order and Dual Row Layout #10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
waylonwang
commented
Sep 13, 2025
- Added a "Displays" section with configuration options, allowing users to set ordering rules to determine display sequence when multiple displays are connected. This enhances the original horizontal-axis-only comparison method by supporting both horizontal and vertical axis prioritization with configurable sorting directions. This ensures more precise and stable display arrangement when switching between different external displays on a MacBook.
- Introduced a "Dual Rows" layout where status icons in the system menu bar are displayed in two rows, significantly improving space efficiency in the status bar area.
- The space naming dropdown menu now displays more detailed Display and Space/Full Screen identifiers, providing users with clearer reference information when naming spaces during display ordering rule changes.
- Added visual separators between Spaces from different displays in the right-click context menu, making it easier for users to visually distinguish between them.
… layout for compact mode.
…er consistent with the right‑click menu and status bar.
…s ManagedSpaceID changes
|
@waylonwang Thank you very much for your pull request! Screen.Recording.2025-09-15.at.23.22.58.movCould you please explain if this is the intended behavior, and if so, what is the reasoning behind it? |
Multi-Display Order
Dual Row Layout
|
d4b75ae to
684b14b
Compare
|
Hello @waylonwang , Wow okay, these settings work in a very detailed and specific way. Let me think a little bit more about this feature. |
|
Hello @waylonwang, Right now I have: Could we implement a toggle for this? |
bc25fb8 to
8066cf1
Compare
The idea of ordering multiple displays came about because my MBP has an external display both at the office and at home, and I place both above my MBP. I want my MBP’s built-in display to be the primary display, while the external display serves as my secondary display. I hope that in the status bar, the MBP’s built-in display appears on the left, and the external display appears on the right. After installing Spaceman, it worked perfectly at the office—the external display appeared to the right of the built-in display in the status bar. When I returned home and opened my MBP, connecting it to another external display, I noticed that the external display appeared to the left of the built-in display. So, I began investigating the cause. I discovered that although the home display was positioned above the built-in display in macOS’s display arrangement, just like at the office, there was a slight difference in the left-right alignment. Whether the top display was slightly to the left or slightly to the right made a difference in the serial arrangement. The original code of Spaceman only implemented judgment based on the x-axis and did not handle the y-axis. As a result, it behaved just like macOS’s display arrangement, whereas I simply wanted the external display above to always appear to the right of the built-in display in the status bar, regardless of its placement.
Therefore, I modified the code in Spaceman. The result is now stable—no matter how I position the external display in macOS’s display arrangement, as long as it is above the built-in display, it will always appear to the right of the built-in display in the status bar. If you have any better ideas for configuration to help users understand this setup more clearly, you are very welcome to make adjustments! |
Since there are only two rows, arranging them from top to bottom and then left to right is straightforward and doesn't require calculating the number of columns, so I handled it this way for simplicity. However, calculating the number of columns is also easy. When the Dual Row layout is selected, I can add an option to determine the priority direction for spatial ordering. |
I've added an option in my fork to configure the fill order (Row first/Column first) when using Dual Row layout. After this PR is merged, I'll submit another PR to implement this feature. |
|
@waylonwang Thank you so much for implementing this "fill order" toggle! I merged the individual changes to my main branch. |
I tested the setup on my own MacBook. I clicked "Arrange..." and positioned the screens one above the other, with the top display slightly to the left. Spaceman (and the Displays settings panel) then showed the top display on the left. But when I disconnect the external screen in either configuration, reconnecting it restores the display to the same position. That is why I'm wondering if your issue can be solved by changing the arrangement in the System Settings. I suggest opening the Display Settings, clicking "Arrange..." and moving the top display slightly to the right; and doing this twice, once for each external screen. I would expect that macOS then remembers the horizontal positioning for each screen correctly, and the alignment should be consistent. Would you be kind enough to try this out? screen-positioning.mov |
The "Arrange..." option in the system's Display Settings can affect the order of displays in Spaceman. However, I feel that this influence is imperceptible to most users. It was only after in-depth analysis that I discovered the rules behind how the macOS system arranges multiple displays. Therefore, I suggest not requiring users to understand how the operating system sorts displays. Instead, the approach should be based on the user's own perception. For example: "Hmm, the monitor I placed above should appear on the right in Spaceman." To make this requirement and configuration more user-friendly and easier to understand, the configuration options could be optimized with clearer descriptions:
|
|
Hello @waylonwang , I have a proposal. I distinguish between four situations:
From left to right:
In situations 1 and 2, we always want to follow macOS’s horizontal ordering. This also gives us an unambiguous criterion: if the side edges touch, we call it “side by side”; if the top and bottom edges touch, we call it “stacked”. We can determine whether the top and bottom edges touch by comparing the display1.centerY and display2.centerY which should be within a tolerance margin of the sum of half of the heights of the displays. I propose to make one setting which can toggle between: "default order", “top goes left”, or “top goes right”. When the above criterion determines that the displays are vertically stacked, then the value of the new setting will be taken into account. If it determines that the displays are side by side, Spaceman should always use the default macOS order. I have done some preliminary work on this, and that seems to work correctly. |
|
Hello @waylonwang , please try https://github.com/ruittenb/Spaceman/releases/tag/v1.12.8-alpha |
|
Hello @waylonwang , |
|
Implemented, albeit in a different form |


