Why Tiling Window Manager Sucks (xmonad, ratpoison, dwm, etc)

By Xah Lee. Date: . Last updated: .

tried xmonad today for real. Currently, 1 hour into it. [see How to Use xmonad; xmonad Keys]

Tiling windows is unusable and inefficient.

• Complete esoteric set of keys you need to memorize just for the tiling-window mechanism. Also, standard keys such as 【Alt+F4】 are now screwed.

• More Combo keys = RSI. [see Keyboard Shortcut vs Launch Buttons] I type more than any Haskell coder on this earth.

• Encroach on each app's keys. This means, you'll spend time to config each app, or diddle with the global mode key setting. This means hours to be spent down the road.

• Completely screwing emacs's keys. (No, remapping to any of Super, Hyper, ▤ Menu, CapsLock keys won't help. All modifier keys are used up in my emacs for many purposes, including inserting math symbols.)

[see Emacs Keybinding, Keyboard, Articles Index]

Tiling Windows Concept = Fail

Worst of all, the tiling windows idea itself is too idealistic. The idea behind tiling windows is that it uses your screen real-estate efficiently. Namely, all apps are laid out without gaps.

But what this means is that, the natural optimal size and position and arrangement of app windows on your screen is sacrificed. They, the position, size, arrangement, are artificially made to fit into a table layout. If all you do is text terminals, that's ok. But as soon as you have browser, image viewer, image editor, text/voice/video chat programs, math/scientific apps, …, each really needs its own optimal position/size. So, this means, when using a tiling-windows scheme, you either pop them into full screen, float them, or put each in a workspace, no tiling at all. Or do a lot combo key press to re-arrange/re-size them tiled. Much more work than is worth.

If you need every window to be the same size, great. As soon as you need one window for different shape/size, then you get funky sub-optimal layout. The gaps between windows simply moved into your windows. Some window will have lots of white space, and some will have jagged lines because the window is too narrow.

One symptom of tiling windows inefficiency is the so-called fibonacci layout.

tiling windows dwm-spiral
Suboptimal window size problem when windows are forced into a table layout. Notice the squashed clock, and wrapped lines in terminal. [image source http://dwm.suckless.org/patches/fibonacci]

Tiling windows… Do you really need to look at ALL the windows at once?

A Challenge: Try This Workflow

Try the following workflow for a week. I'd be interested to know if you still think tiling windows great.

• remove tiling manager. Use a basic, normal, one, such as xfce.

• set workspace/virtual-screen to just 1. (and remove the tens of related keybindings)

• set up 3 function keys to switch to 3 of your most used app. For example, {F8, F9, F10} for {emacs, browser, terminal}. [see How to Set Key to Switch to Browser]

• set up 1 key to switch to last window, such as F4. (this is normally【Alt+Tab】. In xfce, can be done easily. In lxde+openbox, the problem is that it requires pressing Enter to “exit” the switch, similar to releasing Alt.)

• set up 1 key to cycle windows within a app. F3. (trivial to do in xfce. Harder in lxde+openbox.)

• set up 1 key to toggle max/restore window size. F1

• set up 1 key to close window. For example, F6 (must be 1 single key. 【Alt+F4】 is not good.)

• set up 1 key to switch prev tab, and 1 key to switch next tab. (i use {F11, F12})

• set up 1 key to close tab. For example, the pause/break key. [see Print Screen, SysRq, ScrLk, Pause, Break Keys] (note: the prev/next tab key, and close tab key, should be next to each other. If you are using a full-sized PC keyboard with numberpad, best to use / * - for {close, prev, next} tab, in that order. [see How to Program Number Keypad as Function Keys] )

• turn on mouse hover auto-raise window. (not just focus, but raise.) [see Linux: Mouse Hover to Auto-Raise Window]

• ban double-click. [see Windows: Single-click Open File]

Note, all above keys should be single press key, no holding of modifier shit.

which key to set really depends on your keyboard. (i'm assuming you are on a full-sized keyboard, not laptop, as you shouldn't type on laptop keys for long periods.) For a normal PC keyboard, the best keys are likely to be all function keys. but if you use any of the batman keyboards, you have a lot options, such as putting them on thumb keys.

If you do have a keyboard with extra keys, remove ALL keybinding that involves holding a modifier. Remove them ALL. Never press a key combination. [see Banish Key Chords]

if you don't know how to set keys for items i didn't give explicit instruction, see:

all you want to know about keyboard layout, dvorak, colemak, touch tying

xah talk show 2019-08-21 all you want to know about keyboard layout, dvorak, colemak, touch tying

Video Demo

Here's a video demo of my technique.

It's actually a demo of me using emacs, but you can still see my system. Also, am using a Mac there, but the principle is the same.

xah emacs demo 2018-05-22


Even More Efficiency

This essay became popular, and over the years, lots comments.

Here's a basic guide, if you want the utmost efficiency.

First, get yourself a mechanical keyboard with lots thumb keys, and even better is driverless programable. Because the keyboard hardware, is the thing you touch every minute. It's the interface between you and your window manager. A good efficient one, makes a world of difference.

you want mechanical because that makes pressing keys much easier. [see Mechanical Keyboard and Repetitive Strain Injury]

you want lots thumb keys because thumb is the most powerful finger. (for pressing Control Alt or otherwise use it as leader key, or single function such as vi's Esc, or switch to last window.)

you want programable because then it's 100% reliable, not going thru loops and hoops via OS that always have glitches. And it works in any OS when plugged in. No need to spend hours with xmodmap or AutoHotkey or karabiner.

you want driverless programable because then you can just press keys on the keyboard to remap keys or record macros on the fly. No need to install or startup a driver software, which is usually intrusive that diddle with kernel, or have to do the elaborate process of config keyboard on a website then download firmware updater and follow the procedure.

Get yourself a Programable Keypad for all your single-key press shortcut needs. (F1 to F12 is not enough)

Programable Keypads

See Why Function Keys F1 F2 Are Useful

and if you too cheap to buy a dedicated programable keypad, see How to Program Number Keypad as Function Keys

alternative or in addition to programable keypad, get a 10 or 20 buttons mouse. You no understand it untill you are a competitive MMO gamer or photoshop pro.

see Mouse Reviews

also, scroll is the MOST important thing on mouse, because you use it the most.

especially on linux, where there's no accelerated scroll, you want scroll wheel that can spin.

See Logitech Mouse with Spin Wheel

the above are hardware stuff. Surprisingly, it is actually more important than your window magager or key setup. Especially for Repetitive Strain Injury issues.

also, in general, avoid any key combos such as holding Control, Meta, Alt. Ban them. See Banish Key Chords

and lastly, if you are into keybinding efficiency research, read the whole series of articles at

Keybinding Design ⌨

no wanna move hand to mouse?

a slew of linux emacs vi idiots have the obsession of wanting to ban the mouse. Typified by the name ratpoison windows manager. The level goes like this:

when you are at Xah level, you want 2 mouses. One for each hand, use whichever convenient at hand, and avoid mouse hand problem. Or, use a trackball or touchpad for one of them.

xah keyboard station 20170917 34454
xah keyboard station 20170917. The towels are used as wrist pads.

Reddit Discussion

keyboard driven floating window manager. https://www.reddit.com/r/unixporn/comments/783smw/keyboarddriven_floating_window_manager/

Linux Shell Basics

  1. Get System Info
  2. Shell Basics
  3. grep, cat, awk, uniq
  4. sort
  5. find, xargs
  6. diff Files/Dir
  7. dir size: du
  8. dir tree
  9. tar gzip bzip2 xz 7zip rar zip
  10. wget, curl, GET, HEAD
  11. rsync
  12. Install Packages

Sys Admin

  1. Job Control
  2. ps
  3. top
  4. htop
  5. RAM stat
  6. Users and Groups
  7. File Permission
  8. Opened Files: lsof
  9. shutdown, sleep


  1. Bash Keys, Terminal Keys, Man Page Keys
  2. Bash Prompt Setup
  3. Bash Color Prompt
  4. .bashrc, .profile, .bash_profile
  5. Virtual Console
  6. Terminal Control Sequence Keys
  7. Reset Terminal
  8. tmux
  9. man page
  10. Bash Manual in Chapters
  11. BASH Shell Misc Tips
  12. Log Terminal Session

Linux Desktop

  1. Most Useful GUI Apps
  2. Set Default App
  3. Shell Commands for GUI Apps
  4. Image Viewers
  5. Music Players
  6. Move File to Trash by Command
  7. X11 Selection and Clipboard
  8. How to Switch to LXDE, Xfce
  9. LXDE Keyboard Shortcuts
  10. LXDE/Openbox, Change Keyboard Shortcuts
  11. LXDE Set Key Repeat Rate
  12. LXDE/OpenBox, Disable Mouse Scroll Wheel Hide Window
  13. Xfce Keyboard Shortcuts
  14. Xfce Good Themes
  15. xmonad Keybinding
  16. How to Restart X11
  17. Why Tiling Window Manager Sucks
  18. Standard Fonts
  19. How to Install Font

Linux Keybinding How-to

  1. Keyboard Software Guide
  2. Swap Control Alt Keys
  3. Set F2 F3 F4 to Cut Copy Paste
  4. CapsLock → Escape
  5. CapsLock → Home
  6. Shift Lock
  7. Key to Switch App
  8. Key Repeat Rate
  9. System Keyboard Layout
  10. Switch Keyboard Layout
  11. Change Volume
  12. xmodmap
  13. xbindkeys
  14. xvkbd
  15. Find Keyboard Key Scancode
  16. X11 Keyboard Key Names
  17. 2 Layouts for 2 Keyboards
  18. Chinese Input Setup


  1. Mouse Hover to Auto-Raise Window
  2. Mouse Hover-Click
  3. Set Mouse Single-Click to Open File
  4. How to Set Mouse Speed
  5. How to Swap Mouse Buttons
  6. Set Trackball/Mouse Do Scroll
  7. Setup Accelerated Scroll and AutoScroll
  8. X11 Mouse Button Numbering

If you have a question, put $5 at patreon and message me.