This page compares window managers extensible, or programmable, so to say, with scripting languages.
What's "extensible window managers"?[]
Window managers are 'event-driven' - they react when a window appears, or the user presses some keys, etc. In extensible window managers, users can freely override, or newly define those reactions by scripting. Triggers include timers, window changes of title or geometry, etc.
Basics comparison[]
Window Manager | Language | Repl | Type | ICCCM / EWMH Compliance |
---|---|---|---|---|
Sawfish | Librep (a Lisp dialect, mixture of Emacs Lisp and Scheme) | Yes | Stacking | Partial |
CLFSWM | Common Lisp(s) | Yes | Dynamic = Tiling and Stacking | Very partial |
StumpWM | Common Lisp(s) | Yes | Tiling | ? |
XMonad | Haskell | No | Dynamic = Tiling and Stacking | Yes ( Wikipedia says you have to turn it on.) |
Awesome | Lua | Yes | Dynamic = Tiling and Stacking | Yes |
Qtile (See also Tilenol below) | Python 3 | No | Dynamic = Tiling and Stacking | ? |
Subtle | Ruby | Yes | Dynamic grid tiling and stacking | Yes |
KWin | JavaScript, QML | Yes | Stacking
Tiling is available by 3rd-party extensions |
style="background: #90ff90; color: black; vertical-align: middle; text-align: center;" |Yes |
Window Manager |
Language | Repl | Type | ICCCM / EWMH Compliance |
Tiling[]
- CLFSWM's frame model is unique. With its parent-children structure, you don't need pager, tabbing, nor workspaces (= virtual desktops.)
- Subtle simply divides the screen into "grids", 3x3 by default, allowing quick maneuver.
- KWin: the following 3rd party tiling extensions are available:
Repl[]
With repl, users can run their own scripts on-the-fly. Repl stands for "read-eval-print-loop".
- Sawfish's repl is available from both console and Emacs, and supports tab-completion for function and variable names.
- In CLFSWM, common-lisp's repl is available. You can also use CLFSWM in a client/server manner, with a common-lisp's repl available.
- In Awesome, you can use "awesome-client" command.
- In Subtle, you can use either subtler (subtle remote) on the commandline or the Ruby extension subtlext in a custom script.
- In KWin, you can execute a script file through a D-Bus interface or use the Desktop Scripting console integrated in Plasma Desktop.
- Qtile has several repl options.
Some don't have Repl:
- In XMonad, user-written xmonad codes need compilation, although GHC, the Haskell compiler, has repl.
ICCCM / EWMH[]
ICCCM and EWMH specify window manager standards.
Visual effects comparison[]
Window Manager | Configurable titlebar / Themable | Configuration with GUI | Pager | Taskbar and Application starter | Tabbed windows | Compositing |
---|---|---|---|---|---|---|
Sawfish | Yes | Yes | Yes. sawfish-pager understands lisp, and communicates with the window manger in lisp. | No (But there's "apps-menu". See below.) | Yes (yet primitive) | ? |
CLFSWM | Yes, all configuration variables can be tweaked. | Yes, with CLFSWM standard menu | No, you don't need one. "You're in the pager". | No, but there's the application launcher menu. See below. | No. You don't need tabs in CLFSWM. | Yes, with an external manager such as xcompmgr |
StumpWM | No | No | ? | ? | No | Yes, with an external manager such as compton |
xmonad | Yes | No? | ? | third-party | Yes | Yes, with xmonad-contrib and an external manager |
Awesome | Yes | No | 3rd party pagers | It's been broken. | Yes | |
Qtile | Yes | No | No | Yes | ? | No |
Subtle | Yes (Called "style") | Styles can be customized with the styler from subtle-contrib | 3rd party pagers | Yes. Quite configurable | No | 3rd party compositors |
KWin | Yes | Yes | No | No | Yes | Yes |
Window Manager | Configurable titlebar | Configuration with GUI | Pager | Taskbar | Tabbed windows | Compositing |
Configuration with GUI[]
In Sawfish, basic configurations can be done via GUI, which includes setting boolean, choice, and number type variables, key bindings, "window rules" (Per-window geometry, style, etc options.) GUI reads from and writes to a lisp file. GUI configuration profits both for newbies and experienced users.
Pager[]
Pager shows the thumbnail of the screen, for some or all of the large desktop and workspaces.
Taskbar[]
Taskbar differs among window managers / desktop environments, but basically they show present windows in icon / by name, and sometimes offer a launcher of some applications.
- In Sawfish there's no taskbar, but a launcher of applications is offered. It's automatically generated from softwares you installed, and at the same time highly configurable. It's called 'apps-menu'. Of course you can use third-party taskbars.
- CLFSWM offers a menu to run apps. The applications menu is dynamically generated, but the default list is written by hand.
- Qtile has a taskbar with system tray.
Input Comparison[]
Window Manager | Supports XKB | Input event synthesis | Per-window key binding | Input translation per window | "Extra" mouse features | Undo / history |
---|---|---|---|---|---|---|
Sawfish | No | Yes | Yes | Yes | See below | No undo. Remembers only the last operation. |
CLFSWM | You can use either keysyms or keycodes | Yes | ? | ? | See below | Not yet. |
StumpWM | ? | ? | ? | ? | No, mouse is completely ignored. | ? |
Xmonad | Yes | ? | ? | No | ? | ? |
Awesome | No | Yes | Yes | No | ? | ? |
Qtile | Yes | Yes | Unless you resort to kludge | Probably no | No | No |
Subtle | Yes | Yes | Yes | Yes | Yes | Yes |
KWin | Yes | No | ? | No | Yes | No |
Window Manager | Supports XKB | Input event synthesis | Per-window key binding | Input translation per window | "Extra" mouse features | Undo / history |
XKB[]
Without XKB support, some combinations of modifiers and the main key are not recognized. (See the output of xmodmap -pk. Keys with "NoSymbol
" will be ignored.)
For example, in German layout you can't bind ° (degree sign) key.
Input event synthesis[]
The window manager allows you to generate a fake keyboard / mouse event.
Input translation per window[]
In Sawfish, you can configure each window with "key translation". For example, by typing Control-X
on the xterm, it'll turn into Y
.
For example, you can choose "ctrl-q" to close all applications, even for softwares that don't allow key-binding configuration.
Extra mouse features[]
- Sawfish provides "edge-action": when the mouse pointer hits each of the screen edge / corner, a hook is called. For example, you can make the drag of a window to the top edge maximize that window.
- CLFSWM has it, too, called "corner" (But not edges). BTW there is a mouse motion hook, feel free to add any actions you want when the mouse hit the edge.
- KWin supports screen edges. Scripts need to register for the edge and a callback is executed when the edge is hit.
Screen comparison[]
Window Manager | Supports large desktop | Supports multilple monitors |
---|---|---|
Sawfish | Yes | Xinerama (treat as one big screen), only primitive. |
CLFSWM | No | Yes |
StumpWM | ? | Yes |
Xmonad | No? | Yes |
Awesome | No | Yes |
Qtile | No? | Yes |
Subtle | No? | Yes |
KWin | No | Yes |
Window Manager | Supports large desktop | Supports multilple monitors |
Large desktop[]
The desktop can be extended larger than the physical monitor. This must be good even for tiling window managers, because its geometrical structure appeals to your intuition, unlike workspace = virtual desktop.
Many modern window managers supports tiling, and tiling window managers usually don't have large desktops.
Multiple monitors[]
- Xmonad's multi-screen help is well written.
- In Awesome, you can switch virtual desktops per monitor independently, which feature is not so common yet among other window managers.
On the other hand, Awesome doesn't seem to manage "tags" (Awesome's way of managing workspaces) common to monitors, according to a blog post (in Japanese). - In CLFSWM, by default, there is a root frame per monitor. Managing windows is done as usual in the CLFSWM way.
Community and Development Status[]
Window Manager | Good Quickstart Guide | Code repository | Mailing list |
---|---|---|---|
Sawfish | No | Download#GIT | Gmane archive |
CLFSWM | See here | gitweb | Several MLs |
StumpWM | So-so (See "Introduction") | gitweb | Gmane archive |
Xmonad | Excellent. See the guide tour. | download; explore latest code | Gmane archive |
Awesome | So-so | gitweb | Gmane archive |
Qtile | No | github site | google group |
Subtle | Very good. See wiki | Mercurial web interface | No ML? See Forum or IRC |
KWin | Tutorial and API documentation and Effect documentation | gitweb | Listinfo |
Window Manager | Good Quickstart Guide | Code repository | Mailing list |
- Xmonad's website is best organized, and manuals are easy to locate what you're searching.
- Subtle has a very good wiki, too.
- Sawfish may be the most scattered.
See the source code repositories and mailing list archives to see how active they are. All are developed (more than) moderately now.
- Mailing list activity
- (Don't differ much, updated Sep 2011)
Pros and Cons[]
Sawfish[]
Since it's stacking, new users can use it without any preparation.
Users can easily override the system-installed lisp file, say /usr/share/sawfish/.../lisp/foo/bar.jl with ~/.sawfish/lisp/foo/bar.jl. You can add as many such directories as you want, enabling separation of stable and testing codes.
The language, librep, is not an authentic Scheme. It's only for Sawfish, and obsolete in many aspects. Rewrite in some Scheme is desired, but it's not so much likely to happen.
In some distros (e.g. Debian), it's not up-to-date.
CLFSWM[]
(Next) key bindings are shown on the screen, so easy to use for newbies.
StumpWM[]
Xmonad[]
Haskell is quite abstruse.
Any change to the system often requires serious reconsideration of many other aspects of the code. - a blog article
I don't know Haskell very well at all. Although I am a developer[...] I find Haskell's syntax annoyingly confusing. However, I have a pretty extensive and very customized xmonad.hs file. I was able to create it by reading documentation, and asking the xmonad mailing list many many specific questions. And the investment has been well worth it. The community around xmonad is fantastic. It's really active, and very responsive and supportive. - a message in mailing list
Dependency on haskell is not usually considered a problem. See for example this discussion.
Awesome[]
Lua is relatively easy.
I couldn't like the customization file which looked like an extraction of the core code. - a blog article (Japanese)
Awesome supports D-Bus, thus supports notification-spec, so e.g. "notify-send" and kde apps send their notification to Awesome.
Awesome is easy to try, but Awesome may be less flexible than other extensible window managers since core codes are in C. so if you feel discontent, you can turn to others.
Some people feel Awesome is unstable, crashing sometimes. At the same time, Awesome is very popular, so most don't suffer from it.
Old defects[]
Awesome's configuration file used to change too quickly, but it doesn't any more.
Qtile[]
(Obsolete, fixed in xpyb-1.3, released in March 2012.) Qtile's memory leak issue was terrible. Running for a couple of days would reach a Gig byte.
Subtle[]
(Obsolete, fixed in Ruby 1.9.3) It wasn't Subtle but ruby, but every 10ms a wakeup happens. Further readings: [1] [2].
KWin[]
Although KWin is the window manager of the KDE Plasma Workspaces it can be used with other desktop shells, for example it works well with Razor-Qt. The scripting capabilities are very extensive and used to also implement core features. All user visible elements are written in QML, many animations are written in JavaScript, some functionality is provided as scripts written in JavaScript. For scripting features at least version 4.9 is required, this is not available in Debian Wheezy.
Others[]
Tilenol[]
Tilenol homepage (github)
Tilenol is written in Python3, heavily influenced by Qtile.
wmii[]
Though it's not scriptable in strict sense, it seems it's nearly so. Recently the development is not so active.
pwm[]
pwm stands for "perl window manager", and it's entirely written in perl, so you can customize it. No visual frill. Written in 2010-2012.
External links[]
- Xmonad-advocacy compares Xmonad, Awesome, and StumpWM.
- Category:X window managers extensible by scripting in Wikipedia.
- Comparison of Tiling Window Managers - ArchLiunx Wiki