I often work from my MacBook, with an external display. But the default overlapping window management is not very convenient: you either have to switch windows with Cmd-Tab or maximize windows and swipe between them. This doesn’t work well if you have more than a few open apps at the same time: you need to store context about where that window was in your head.
I have tried to replicate Linux tiling window managers on a Mac. The good thing about a tiling window manager is that individual windows don’t overlap and are usually grouped on a separate “workspace” that can be reached with a single shortcut (usually something like Cmd+1..9). It is then possible to associate every such shortcut with an app or a group of apps. In my case, for example:
- Workspace 1: Web browser
- Workspace 2: Text editor/IDE
- Workspace 3: Terminals
- Workspace 4: File management
- Workspace 5: Chats
- Workspace 6: Calendar
- Workspace 7: Email
- Workspace 8: Misc
- Workspace 9: Music
I’ve spent so much time working like this, that it has etched itself deeply into my reflexes.
Unfortunately, the real tiling window management is impossible on a Mac. The OS just doesn’t let other software to control windows well enough to make the experience flawless. All existing software calling itself “tiling WMs for OS X” is buggy and janky.
So, instead what I would like to offer you is a way to achieve a convenient tiling-like workflow without any additional software, using only what’s available by default.
Don’t run any apps in fullscreen mode
Unfortunately, it’s impossible to assign a shortcut to a window that’s been put to fullscreen mode, only to “workspaces”. This is because doing so creates a “dynamic” workspace that is not listed in settings. Instead, just maximize windows by double-clicking on their titlebars. This will still keep the titlebar visible, but you’ll have to pay this price for convenience.
Auto-hide what’s possible
Go to Settings->General and enable “Automatically hide and show the menu bar”. Then go to Settings->Dock and enable “Automatically hide and show dock”, and also set the dock position on the screen to “Left”.
Doing this will save you some space, since you won’t be using full-screen app mode.
Change primary screen to external monitor
If you work on a MacBook and attach it to an external monitor, working in dual-screen mode (as I do), you may want to make the external monitor “primary”. This is very convenient, because OS X will migrate all open apps to your primary display when it’s attached, and then migrate them back to your laptop screen in exactly the same configuration/layout when you detach it. What’s most important is that this will keep windows on the same workspaces.
To do this, you need to go to Settings->Displays->Arrangement and drag the white stripe representing the menu bar from your laptop screen to your external screen. I know, it doesn’t make sense, but this actually makes your external monitor primary!
Assign individual shortcuts to each workspace
First, do a three-finger swipe up on a touchbar and create 9 workspaces. Then go to Settings->Keyboard->Shortcuts, pick “Mission Control” from the list on the left, and on the right, assign shortcuts to actions “Switch to Desktop N”. I recommend Cmd-1..9, since it’s very natural to use.
Check that it works as expected by switching desktops a few times with these shortcuts.
If you spend some time remembering associations between applications and workspace numbers, I’m sure you’ll find it far more convenient and faster than your usual window switching habits. At least for me, it replicates around 80% of what I like about tiling window managers.