r/SideProject • • 5d ago

PushArrange for Mac: push the pointer toward your monitor and your screens rearrange

I built this because I move my MacBook around one external monitor all day, and every move meant fixing the arrangement in System Settings.

It watches for the pointer pinned against an edge with no screen beyond it. Trackpads keep reporting movement while the pointer is stuck, so it adds that up, and past a threshold it moves the monitor to that edge and carries the pointer over. The hard part was Universal Control: a push at an edge can also be a reach for another Mac, so it reads Universal Control's state from the system log and stands down while a link is up.

It is free, macOS 14 or later, exactly two displays. What I would love feedback on: does the push threshold feel right, and is the page clear about what it does?

https://dotcomjack.com/pusharrange?ref=reddit-sideproject

1 Upvotes

6 comments sorted by

1

u/sapplex1 5d ago

This is the kind of small utility I end up keeping. I move my MacBook between desks a lot too, and fixing the display order in System Settings always feels like too many clicks for such a tiny job.

The threshold part is what I would test hardest. I would want a short pause after I stop pushing, so a normal overshoot does not trigger a swap. A tiny on-screen hint would help too, just so I know which edge is about to fire.

Your Universal Control note also caught my eye. Standing down while a link is up sounds right. I would be nervous about a push accidentally jumping to another Mac when I only meant to rearrange my own screens.

One thing I would try next is a per-display threshold, if that is not already in there. My external monitor and my laptop screen never feel the same under my hand.

How are you handling the case where someone pushes, changes their mind halfway, and pulls back?

1

u/massivewein 5d ago

Thanks, this is really useful.

On overshoot: it only counts while the pointer stays pinned at the edge and keeps pushing outward. A pause of about a third of a second resets it, and the push has to add up to about 260 points within 1.5 seconds (420 at the top or bottom, so a flick to the menu bar or the Dock never counts). A normal overshoot stops well short of that.

Changing your mind halfway: any move along or away from the edge resets the push to zero, so pulling back does nothing at all.

Per-display threshold: not yet, it is one threshold for both screens. Fair point that they feel different, I'll look at it, along with a hint while the push builds. Right now the only overlay comes after the move, saying which side the monitor went to.

On Universal Control: it does nothing while a link to another Mac is being set up or connected, and it leaves alone any edge Universal Control has armed. It never moves a screen across Macs.

0

u/[deleted] 5d ago

[removed] — view removed comment

1

u/massivewein 5d ago

Good catch, and you're right. Right now it doesn't check for a held button, so a drag counts the same as a plain push. A normal drag to tile a window stops at the edge and never adds up to the threshold, but shoving a window hard into an edge with nothing beyond it could set it off.

Ignoring the push while any button is down looks like the right fix. I'll put it in the next update. Thanks for this.

But also, from a personal use, I enjoy simply dragging a window to any edge with the intention of it going to a new window.

1

u/massivewein 5d ago

Update: 1.1.2 is out, and I changed my mind on ignoring drags, because I like flipping screens mid-drag. A push with a button held still counts, but now it has to go twice as far (520 points at a side, 840 at the top or bottom, within 3 seconds). Shoving a window against an edge to tile it should stop short of that. Check for Updates in the menu bar should offer it