Jamie's Blog

Ruby developer. CTO. Swimmer. Always trying to write more

Managing windows on macOS with Amethyst

James lee vpbpwauyeos unsplash

This is how I use the Amethyst window manager on macOS. 

I like to fill a screen with windows. If you’re happy with a desktop that looks like this, then you probably won’t enjoy any of these suggestions

Lots of windows everywhere!

Last year I bought myself a 32" monitor to replace my previous multi-monitor setup.

With two or three smaller (non-4K) monitors, my default method of organising windows was to move them to a monitor and make them fill the screen. Occasionally I’d need two windows side-by-side and I’d use Moom to shift one window to 2/3rds of the left screen, then I’d push the other window to the right third. Moom was also great because you could drag a window to the edge of the window to dock it to that edge. That’s lots I liked about Moom. There’s also Magnet and Rectangle which are very similar.

All these window managers help you move, resize, and snap windows in position—but when I moved to a single 32" 4K monitor, I felt the need for something else. The monitor was too big to full-screen apps most of the time, and it was tiresome to keep moving them around manually with Moom.

It was time for… a “tiling window manager”. If that sounds like some nerdy neckbeard Linux shit, you’re right. It took some time for me to understand it, and get productive with it, but now I think I have a good system that a mere mortal can use.

Neckbeard

Before you tune-out you should know that I’m generally not a fan of UNIX-esque, keyboard-driven tools. I hate Emacs and Vi. I need to google to get out of a tmux session. This is very much not me so it might not feel like you either but read on and see.

I will say that the single best improvement Amethyst could make would be turning all the keyboard shortcuts into menu options and providing a visual guide to the layouts. With that caveat…

Amethyst

Amethyst is an “automatic tiling window manager”. In basic terms, this means it divides the screen into “tiles” then automatically places and resizes the windows to fill those tiles. If you open a window, it will either allocate it to a tile or expand the number of tiles and shift all the other windows to fit. Like this

Amethyst tiles

Two things you should know about Amethyst: everything is a keyboard shortcut, and there are a lot of them. It’s quite daunting but you only need to learn a few which I discuss below.

Amethyst shortcuts

You can play around and find your own preferences but I’ll tell you what works for me.

Layouts

Amethyst has a number of pre-defined layouts along with one called “Binary space partitioning” which is extremely flexible.

I’ve kept it simple and I just use four layouts in the Amethyst preferences: Fullscreen, Tall, Tall Right, and Wide.

Amethyst layouts

There are many, more available.

You can change layouts at any time and all your current windows will adapt to it. I use these keyboard shortcuts to cycle through the different layouts:

Shift-Option-Space: Cycles through the layouts (Fullscreen -> Tall -> Tall Right -> Wide) Shift-Option-Control-Space: Cycle through the layouts in the other direction (Wide -> Tall Right -> Tall -> Fullscreen)

Amethyst will remember the layouts and window positions after a restart so once you have things set up the way you like it should stay that way.

Here’s a quick video of me adding more windows for Amethyst to layout, then switching layouts, changing the main window, and going fullscreen.

https://www.youtube.com/watch?v=sd-RgFdYSKM&feature=youtu.be

Fullscreen

Amethyst fullscreen

Although 32" of 4K is a lot of screen real estate, sometimes I like to focus on just a single application. This makes the current window fill the entire screen. Pretty simple.

Shift-Option-D: Switches to the fullscreen layout. This has the effect of making the current window fill the screen.

Tall

Amethyst tall

This splits the screen vertically down the middle and then splits the right-hand side as required for the remaining windows. Basically, this gives me a large window on the left, and one or more windows on the right.

The large left-hand tile is the “main” tile and you can move the current window to that tile using the Shift-Option-Enter shortcut.

Tall Right

Amethyst tall right

It’s like “Tall” but on the right 😏

This is most often the layout I use when I’m on a Zoom call so I can have Zoom in the top left (near my webcam so I’m looking at the other person), a half-height window for a roadmap or project page, and the agenda or documents on the full right-hand side.

Here’s it in action, with the webcam over the Zoom window

Zoom layout

Wide

Amethyst wide

This splits the screen horizontally, with a single main window at the top, and the rest of the windows tiled at the bottom. I rarely use this but it’s a useful option.

Moving windows in the layout

Now you’ve got the right layout, but the windows are in the wrong places. What to do? Amethyst provides a few options for this but I just use three:

  • Shift-Control-Option-J to cycle the windows clockwise in the layout
  • Shift-Control-Option-K to cycle the windows anti-clockwise in the layout
  • Shift-Option-Enter to move the current window to the main pane

Advanced features I don’t use

There’s a lot more you can do which, being a bear of very little brain, I don’t.

  • You can increase the number of windows in the main pane but I don’t, I just stick to having the one.
  • You can use keyboard shortcuts to move a window to the pane above /below / left / right of its position
  • You can use complex layouts like binary space partitioning
  • You can change the currently focused window
  • You can grow and shrink the main pane (actually, I use this sometimes)

Multiple desktops

This all sounds fine but when you have 10 applications open in a Tall layout, you’ll have one large window on the left and a gazillion tiny useless windows on the right. This is not good what you’re after.

One solution is to minimise the windows you don’t need. I do this sometimes when I have 4 open apps assigned to a desktop (Safari, Zoom, Basecamp, and Roadmap) but I only want to see 3. Typically this is on a Zoom call and I just minimise the app (Cmd-M) I don’t want.

It’s ok but it only helps if you have 1-2 windows extra open. There is another solution though: multiple desktops!

Who knew? MacOS actually has this feature and it works pretty well, though in Apple parlance they are called “spaces”. You can distribute your windows across multiple desktops (I typically have 7-8) which reduces the number of windows on the screen at any one time

You can access the desktops from Mission Control, which is found somewhere on the Touch Bar you’ve forgotten you had. I have Mission Control bound to a hot corner in the top right so moving the mouse there brings it up and it’s much easier.

Efb67833 4379 4311 8c1c 31a09a47a314

You can move windows to specific desktops in Mission Control just by dragging the window up to one of the desktops at the top…

Cleanshot%202021 01 30%20at%2000.59.54@2x

Once the window is dragged to the desktop, Amethyst will organise it according to that desktop’s current layout. You can have different layouts for different desktops which makes it easy to have a Tall side-by-side layout for coding, a fullscreen layout for focused writing, and a Tall split-screen for general web browsing+Zoom+Basecamp.

Alternatively, you can throw the current window to a numbered desktop using Shift-Option-Control-[1…8]. For me, desktop 1 is general, desktop 2 is coding, 3 is communications, 4 is a calendar, 5 is GitHub, 6 is writing, …

You will start to get annoyed once you open a few more applications or restart the laptop and MacOS screws up your carefully-crafted desktop assignments. No fear, macOS has a solution! Move the application windows to the desktop you want them on, then right-click on the application

Change the assignment from the default “All Desktops” to “This Desktop” (eh… not Spaces? 🤷). Now all windows for this application will now open on the current desktop. Yay!

Cleanshot%202021 01 30%20at%2001.06.26@2x

On the laptop

Amethyst seems to remember the layouts on a per-monitor basis so when I’m working from the couch on my MacBook, it defaults to the Fullscreen layout across all my desktops. You wouldn’t know Amethyst was running at all.

Keyboard bindings

I use a Kinesis Freestyle Edge RGB keyboard that has a useful little 8-pack of spare keys on the left-hand side, which can be bound to macros. I have them bound to my main actions

  • Cycle layout forward / cycle layout backwards
  • Make the window fullscreen / move the current window to the main pane
  • Cycle the windows clockwise / anti-clockwise
  • Increase / Decrease the main pane size

Conclusion

This isn’t for everyone but if you’re happy to give up a little control of the precise positioning of windows, and learn a few keyboard shortcuts, then I think it’s a good way to organise your work.


Header image by James Lee on Unsplash