Ask HN: Why does Apple refuse to add window snapping to macOS?
It’s honesty shocking that in 2023, MacOS still has a nonexistent window managing system. Forget us on the outside. How are the tens of thousands of employees who work for Apple not sending the executive team daily feedback on this?
572 comments
[ 4.3 ms ] story [ 332 ms ] threadI might do it more often if I had separate OS windows for code editing. But I use VSCode (and Emacs before that) with 2 or 3 side-by-side panels. I drag those panes wider and narrower frequently.
I've defined Cmd-1, Cmd-2, etc. shortcuts to switch spaces like on Linux desktops, which is a lot faster the 3-finger swiping macOS comes with.
and I do change placements/sizes of windows constantly - accordingly to the task
I can constantly see the thumbnail groupings of apps that I can switch to along the left hand side of the screen. I’ve used other modes (like multiple desktops) but would often forget what spaces I had created, and ended up re-creating them without realising
You're lucky. I didn't even realise this is supposed to happen. Every day I start by moving everything to the correct screen and correct location. It's never remembered and each time windows move to a completely random spot. Things are even worse if I work from a different location for a bit. (Some windows are pseudo-minimised and I have to click the icon a few times to show them again)
It's not even random/occasional. I put slack on the right third of the right display every day. It's never there after sleep or cable reconnection.
While I’m not the person you asked, I would prefer if there was no window snapping at all. I wrote my own code for window management with keyboard shortcuts on macOS and dislike that it tries to be smart when I move windows with the mouse.
On the mac, I use a freeware thingy (Rectangle, linked elsewhere), and I've assigned three shortcuts, and that's enough for me.
The best possible outcome is you get an ex-Apple engineer who may have some background as to the thought process.
https://manytricks.com/moom/
It integrates in the way I would expect the native feature to work: hover the green button for a snapping palette.
I'm not saying moom doesn't have those, I just haven't used it and Rectangle serves my purposes perfectly well.
To each their own, of course. Just trading anectodes. :)
And now that there are so many solutions it might make less sense to then integrate one which will practically kill the rest.
I personally use an app Divvy which let me create global hot keys for specific arrangements and moved on.
^1: https://apps.apple.com/us/app/magnet/id441258766?mt=12
Beyond that, Rectangle Pro (paid, closed source) is where I've put a ton more features. You can find Rectangle & Rectangle Pro at https://rectangleapp.com
While we're at it, the Dock has always been bad. And the top menu bar was good for the original Macintosh with a tiny screen but it makes no sense on a 4k display with many different app windows showing simultaneously. MacOS has a lot of relics of the past that Apple refuses to give up. I just see it as a tax I have to pay to get to use Apple Silicon.
I literally stopped using the spaces feature because of that!. The default animation got me dizzy all the time, but even with that one disabled via accessibility settings they keep a terribly slow fading animation.
It's absolutely ridiculous for a professional machine to impose these things on you.
Most people are not highly technical power users who get annoyed by the small delays, this is a bias I see a lot on HN.
I do agree that their accessibility options should allow for more customization of animations, though. I use ‘magnet’ for window control and it’s instant. Highly recommend. Just wish switching between desktops could be made instant too.
Yabai has many of these fixes that exists, even if you don't use the auto tiling features[1].
[1] https://github.com/koekeishiya/yabai/wiki/Disabling-System-I...
HN has a lot of hate for these animations but I don't think I've ever seen anyone bitching about them elsewhere.
Because MacOS (and iOS) are the only major OSes that don't let you disable them.
This is why I stopped complaining about macOS and just use Linux.
I still have a Linux Desktop that I boot up from time to time, but I've pretty much given up at this point. My time is more valuable than that.
Linux does have some issues (GNOME has some pretty noticeable UI issues) but overall I'm much happier with it than I ever was with macOS.
And by that you obviously mean you haven't booted it up in the past 15 years, judging from what your complaints are.
Apparently this is possible with yabai (https://github.com/koekeishiya/yabai), but it requires disabling system integrity protection which I am personally uncomfortable with.
Wholly agree about the space switching animation. At the very least, I'd have liked the focus to change when I start switching - not when the animation ends. This way at least I could start typing and pressing shortcuts without having to wait. Not perfect, but better.
In general, if something about macOS annoys you and there isn’t a preference setting to fix it, googling “defaults write com.apple <thing you dislike>” will often find a solution. Writing with `defaults write` lets you alter nearly any value in the OS, very few things are hardcoded. A word of advice if you start messing around with this stuff - you will generally want to follow up any `defaults write com.apple.foo` command with `killall Foo` to force restart that component, as writing directly with the defaults utility will not be reflected in real time, unlike what you are used to with changing things in System Preferences.
My display is 27" with resolution of 1280x720. I rarely use multiple windows.
Probably also has some constraints imposed upon it due to requiring that virtual desktops transition smoothly over Screen Sharing, where texture assets are being sent and buffered to a remote compositor.
Anyway, I'd trade a bit of pop-in for a faster computer if that was necessary. There's no excuse to not offer that choice even as a power user "defaults write" option.
Re-rendering to the same compositor target buffer (when you e.g. resize a window), and allocating new textures in (potentially) new formats under control of a new compositor target buffer, are different orders-of-magnitudes of work. Think about how much delay there is from the point you plug in an external display, to the point your windows finish "popping over" onto it and it becomes usable. Allocating a new virtual desktop and moving a window to become fullscreen on it, is doing 90% of that same work.
Why does each virtual desktop have its own compositor and own target buffer? Because each virtual desktop has its own active display mode it's operating under: its own display resolution, its own bitplane format [think RGB vs BGR displays], different memory allocation constraints depending on whether it's currently being mirrored / screen-shared or not, maybe allocated in the VRAM of a different GPU if it's being drawn on a monitor plugged into a discrete GPU's HDMI/DP socket, etc.
This "distinct target buffers with their own compositors" approach is also why you can't span windows across displays on macOS 10.9+. (Before that, macOS used a different approach, that allowed for single virtual desktops that span multiple monitors, but where this would use one big target buffer, formatted to the lowest-common denominator format acceptable to all display targets. So if you plugged in a shitty external display like a 720p projector, and "extended" your desktop to it, then the whole compositor target buffer would get reformatted, and so your internal display's resolution/color depth/refresh rate would decrease.)
> Anyway, I'd trade a bit of pop-in for a faster computer if that was necessary.
My point is that this wouldn't be the trade-off. Instead, you'd switch over to the new fullscreen view, half-rendered — and then it would very likely still take just as long to finish re-rendering and accept input as if there was no animation.
You can actually try this "experience" out for yourself: try having an external display connected; opening Mission Control; and then dragging the focused virtual desktop from your internal display, over to the external display (or vice-versa.) It takes about 3 seconds before all texture assets finish re-allocating in the new compositor target buffer's texture format and re-rendering; and because there's no animation to paper over this case, it just feels unresponsive, like the whole shell has stalled for 3 seconds.
If you think that Apple engineers can't optimize the compositor side work that needs to be done to maximize a regular window or switch between regular full screen windows to take less than one frame then you have a very poor opinion of their engineers that I do not share. And if you think it's not worth the effort to optimize a case that typically happens every couple of minutes while people use macOS then I have to disagree in the strongest possible terms.
• Virtual desktops each have their own compositor texture "namespace", so that everything on the virtual desktop can be reformatted to deal with the screen beginning/ending mirroring/sharing, with the desktop being moved to a display that has a different color-space, etc. The copy of textures to new ones owned by the new virtual desktop, allows the compositor to be able to assume that a given desktop exclusively owns all the textures assigned to render on it. (It's the same set of engineering trade-offs as with message-passing IPC. Here the "messages" are textures and the "processes" are virtual desktops.)
• The "optimization" you mentioned exists and I already mentioned it. It was the old behavior. Go into Settings > Desktop & Dock and uncheck "Displays have separate Spaces." Congratulations, now you're using a non-per-virtual-desktop-texture-domained compositor. Enjoy going back to a world where putting your computer to sleep with no display attached, plugging the display in, and then waking it up, makes the kernel panic! But, if you do as a sibling commentor said and turn the animation down to nothing, you will surely notice the performance increase of full-screening windows.
> simply allocating one new screen sized texture to hold the application contents, which can be done in much less than one frame
Yes, this is what the animation that plays does at the beginning of the animation, on the existing virtual desktop — it creates a new, screen-sized texture, and renders the window being "resized to fullscreen" onto it.
Meanwhile, in the background, textures are being message-passed to a new virtual desktop.
> And if you think it's not worth the effort to optimize a case that typically happens every couple of minutes while people use macOS then I have to disagree in the strongest possible terms.
I don't know why you're full-screening windows so often.
> maximizing
Oh, maybe this is your misapprehension? Full-screen ≠ maximize.
Maximizing a window in macOS is what you get by option-clicking the green caption button. macOS calls this "Zoom".
Until Yosemite, this is the one and only thing the "maximize button" on a window did; "full-screened" windows didn't exist as a separate concept. There were just Spaces, with (maybe Zoomed) windows on them.
I — and pretty much every other macOS user I know — regularly uses zoomed (or just resized to be mostly zoomed) windows, but very rarely uses full-screened windows.
For a lot of reasons, full-screen windows on macOS are really inconvenient. They hide the menu bar; they cause some apps to make a ton of their UI elements inaccessible; they make "overlay" apps (e.g. iTerm's "quick access" theme) inaccessible; they make the Dock require a double-bump to access; they make things you open from the Dock open randomly on some other virtual desktop; they make it impossible to drag-and-drop things onto the full-screened window from another window; they make it impossible to grab the window itself with the mouse to move it to another display (instead requiring you to move the virtual desktop the window occupies to the other display); they don't respect application window grouping in Mission Control, so you inevitably "lose track of" the one window you decided to fullscreen; etc. (Also, until more recent macOS versions, full-screened windows couldn't even display modal dialogs or palette windows.) Basically, they take everything that makes macOS more useful than iPadOS and toss it in the trash.
Using windows zoomed rather than full-screened, meanwhile, has none of these problems. (If you want a zoomed window on a separate display, then make a new virtual desktop, move the window there, and then zoom it. I think Magnet has a hotkey for this.)
[1] https://github.com/koekeishiya/yabai
Maybe in 2025
In Apple's UX view, it seems like you're meant to maximize windows to "spaces", and switch between workspaces using a few gestures (4 finger swipes mainly) to reveal all windows, and swap between workspaces that way.
Rectangle, as others have pointed out, give you the "snap" experience you would expect from other OSs.
I just don't see why if you'd thought it out, and that's (either of them) the you wanted people to do it, why you'd have both options.
And then there's the weird 'close actually closes the window, not the app' (even though for some large percentage of apps the one window is all there ever would be).
Their full-screen-window-gets-its-own-desktop-space was added later.
Overlapping and freely resizable windows is the Mac paradigm. In my estimation they don’t add snapping mostly due to pride.
Maximized windows is an intruder. Something that was big on Windows but never really a thing (and just not possible at all) on the Mac at all until a couple of years ago. The implementation of fullscreen mode is clunky and slow.
Given that Apple has been throwing different window management paradigms at the Mac (Exposé later retitled Mission Control which was the original new OS X approach, Spaces in different implementations, sticky windows resizing, Stage Manager, full screen mode, full screen mode with split view) it is truly weird that this grab bag does not include snapping windows. And, I still think that is just down to hurt pride and ego.
MS did it because.. I think Windows used to only support 1 window per program or something. That's why old versions of Office basically go full screen and each document you open is another 'child window' of the main office window. Same was true for stuff like America Online lol.
That pissed off a lot of users who expected MacOS to act like Windows. So Apple changed it.
Then along came the iPad and Apple went full hog on "1 task at a time" UIs. So full hog that Microsoft had to backstep and do the same with Windows 8 lol.
I don't know what Apple is doing anymore lol.
If Apple and Microsoft provided a solution to every UX variant people want, there wouldn't be a market for apps built on top of the platform for UX tools. The further they encroach on the various markets the more developers will be discouraged from entering those markets for fear of the platform making their app redundant.
Apple and Microsoft have to draw a line somewhere, sometimes they get it wrong though and piss off a load of devs.
There are however obvious counter arguments to this with platform default apps such as email. But again it's important for the "average user" to have those in any new device. The platform effectively needs to do roughly 90% of what the average user wants out of the box, but then encourage users to go purchase further solutions from the various markets. Window snapping probably sits in That second area.
I definitely think that window snapping, and other general abstract platform-level controls, should be in your first group.
If and when they do add one we can look forward to the many articles about “sherlocking” though so that’ll be fun.
All this said, I would like to see the full-screen mode get support for three windows, along with a way to stack vertically. There are times when you need more than two windows on a screen.
I also think it’s as simple (and stupid) as Apple wanting to continue to use rounded corners and window-snapping not really making rounded corners look particularly elegant.
you can split this; you just have to hold down the fullscreen button, no right-click access because again, thoughtless application of touchscreen idioms
as someone who uses none of the above: lining things up is painless since window bounds are slightly sticky, & macos remembers app state so it's not like you're doing manual window management every time you start up $APP. broadly equivalent in practice to a tiling wm with elaborate preset layouts & pigeonholes for specific programs. except you just drag things instead of editing a config file. couple this with all the apps i frequently use in full screen (iterm, mpv) having options for pre-lion-style instant-switch fullscreen, and i'm not hurting for lack of snapping... ever, really.
fwiw there are third-party solutions for snapping if you really care, and there are even full-blown x11-style tilers
The relevant discussion starts at 1:33:00
https://atp.fm/episodes/96
Siracusa, who grew up as a (classic) Mac user, explains his tiling and overlapping habits to Arment and Liss, who grew up as Microsoft Windows users and later switched, and they gasp in utter horror, shock and awe.
For example Siracusa explains that he currently has a dozen terminal windows open, and also 19 overlapping Safari windows, normal for him, in BBEdit he regularly hits 20-40; they ask him if he doesn’t know about tabs and he replies “Oh, I love tabs! Of course every Window has many tabs!”. How would he manage/organize hundreds of tabs in multiple applications with a snapping tiling manager? He can’t. It is fun from there. Like, he jokes after a work week his desktop has “sedimentary layers”.
Edit: only 1 13' monitor too
I have some perpetual habit to "clean" my desktop - I get annoyed if I have >15 tabs across 2 windows which easily happens.
> >5000 tabs among all of them
Not to be antagonistic but ... just why? There is no chance you are actively managing and keeping track of these? Is this because it doesnt matter if they are open or not? I am genuinely baffled and confused.
Then you start to work on a project. You have various relevant links open for that, which of course results in opening even more tabs that branch off from those. But then you get distracted and there's another group of Reddit or HN tabs. Oops, right, I was working on that project. A few more project tabs. Then a bunch of Reddit / HN tabs. Then you start a new side project. Etc.
Why not close those comment tabs? Because you're interested and want to see all the new comments! Or you got halfway through and walked away and opened a new tab when you got back. Or you think 'that'll sure come in handy when it's time to work on <some project>, I'll come back to this later for sure!'.
Now, rather than doing the sensible thing and going through all of the previously opened tabs when you're bored, you open a new Reddit / HN window.
(Possibly an attention disorder.)
macOS replacing the “Zoom” stoplight buttons with “Full Screen” as the default behavior still irks me. Why would I ever want something full screen other than a video or game?
Maximizing your window is similar to that. At the same time it doesn’t completely eliminate the window context and the ability to easily switch between applications like full screen does.
In Windows I tend to minimize stuff I'm not actively working on (but not always). In general while I also have a lot of "background" windows it feels a lot less fiddly than MacOS.
Personally I don't like how "minimizing" apps on MacOS puts them in the temporary section of the launcher, I'd rather they minimize back down to where the icon of the app normally lives. I would end up with a bunch of black squares on the launcher in some random order with a tiny icon of each telling me which app this actually is.
- https://hypercritical.co/front-and-center/
And one that gives him an application switcher that works the way he likes:
- https://hypercritical.co/switchglass/
Apple has a solution for this which is the green dot that puts your app in a separate space to be truly full screen, and you can split screen between two apps. I guess that’s what Apple would like you to do instead of snapping.
“This document describes techniques and apparatuses enabling assisted presentation of application windows in a multi-application environment. The multi-application environment described herein presents one or more application windows, which can be sized, positioned, or layered to provide an optimized layout. In some embodiments, these techniques and apparatuses enable a size or position of an application window to be determined based on an edge of another application window.”
I use MacOS daily at work but I would LOVE if I could use Windows instead, that's what I have on my personal machine. It looks like the OP simply wants to use Microsoft and can't admit it to themselves!