Imagine how much time you would save if you never had to take your hands off the keyboard. For the last 2–3 years I've managed to improve my daily productivity, focus, and efficiency using a tiling window manager in macOS and Linux which allows me to do just that.
Compositing window managers
A window manager, in simpler terms, is the software that controls the placement and appearance of windows in a graphical user interface. For Windows and macOS users this is an out-of-the-box feature that has been around for decades which we all know and love.
Window managers included with mainstream operating systems (Desktop Window Manager on Windows, Quartz Compositor on macOS, and GNOME on Ubuntu) are known as compositing window managers. These are generally intuitive to use; they let us move, resize, or hide our work all with the humble mouse and trackpad while being beautiful to look at.
Compositing window managers practically require a mouse to use, there is no way to resize or move a window precisely without one (and without 3rd party software). Think about all the steps it takes to move and resize a window:
- Remove your hand from the keyboard
- Move the mouse to the title bar
- Click and drag
- Move the mouse to the edge or corner of the window
- Click and drag again
- Click back in your window
- Put your hand back on the keyboard
Look at all those steps! You could be losing anywhere up to 10 seconds of your time for a simple operation that takes 2 or 3 with a tiling system. Repeat that countless times during a full work day and you've lost several minutes for every hour better spent doing something else.
Tiling window managers
A tiling window manager like i3 or AwesomeWM removes the need to manually control the location, position, and size of your windows. It finds the most predictable and efficient space for a new or existing window while providing incredibly quick ways to manipulate the results, all with the keyboard. I personally use i3-gaps on my Linux devices and chunkwm on my Macbook. You can find my configuration for these in my dotfiles repo.
Update: 3 September 2019: I've migrated everything to Linux and no longer maintain macOS configurations. The link above to chunkwm configuration may become out of date eventually.
These window managers are often deeply integrated into the operating system (using either X/Wayland on Linux and low-level accessibility features in macOS) and take over some common keyboard shortcuts and modifiers. Because of this integration, the operating system remains fast and the window manager shouldn't interfere with existing configuration1.
Typically, a good tiling window manager can be configured to perform very common window and workspace manipulation actions with a few keystrokes that already fit in with your way of working.
The following examples are some common keybindings that can be fully configured to your own preferences
Changing focus to another window or workspace2 is as quick as a
Alt + Left or
Alt + h keystroke using arrow keys or Vim-style arrows on the home row. Similarly, a window can be moved to a new location with
Alt + Shift + h or workspace with the same keybinding and the number of the workspace (
Alt + Shift + 2).
Windows can be resized by using pre-defined point/pixel increments depending on which manager you use. If you need to get very specific with resizing, a single modifier and a click + drag can make your layouts pixel-perfect3.
My personal favourite binding is zooming (or fullscreen) with
Alt + z or
Alt + f. This makes a focused window fullscreen and hides other windows from view. It's especially useful when using a laptop screen, as each window behaves as though it's another workspace.
This method of interacting with the desktop may not be for everyone. You'll spend a lot of time configuring, learning, and breaking things, before you end up with a workable system you're comfortable with.
In saying that, if you're the kind of person to spend time optimising your workflow and improving your personal productivity then I highly recommend giving a tiling window manager a go.