Teika kazura (talk | contribs) m (Minor changes) |
|||
Line 1: | Line 1: | ||
− | This page compares window managers extensible with scripting languages. |
+ | This page compares window managers '''extensible''', or '''programmable''', so to say, with scripting languages. |
== What's "extensible window managers"? == |
== What's "extensible window managers"? == |
||
− | Window managers are 'event-driven' - they react when a window appears, or the user presses some keys, etc. In |
+ | 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 == |
== Basics comparison == |
||
Line 8: | Line 8: | ||
{| class="wikitable" |
{| class="wikitable" |
||
|+Comparison of basic features |
|+Comparison of basic features |
||
− | |+Comparison of basic features |
+ | |+Comparison of basic features<!-- Dunno why, but GUI editor of this site duplicates the caption. It doesn't harm, though.--> |
! Window Manager |
! Window Manager |
||
! Language |
! Language |
||
Line 18: | Line 18: | ||
| Partial |
| Partial |
||
|- |
|- |
||
− | | [http://common-lisp.net/project/clfswm/ CLFSWM] || Common Lisp || {{tableYes|Yes}} || Dynamic = Tiling and Stacking || Very partial |
+ | | [http://common-lisp.net/project/clfswm/ CLFSWM] || Common Lisp(s) || {{tableYes|Yes}} || Dynamic = Tiling and Stacking || Very partial |
|- |
|- |
||
| [https://github.com/sabetts/stumpwm/wiki StumpWM] || Common Lisp(s) || {{tableYes}} || Tiling || ? |
| [https://github.com/sabetts/stumpwm/wiki StumpWM] || Common Lisp(s) || {{tableYes}} || Tiling || ? |
||
Line 27: | Line 27: | ||
| {{tableYes}} |
| {{tableYes}} |
||
|- |
|- |
||
− | | [http://qtile.org/ Qtile] || |
+ | | [http://qtile.org/ Qtile] || Python2 || {{tableNo}} || Dynamic = Tiling and Stacking || ? |
|- |
|- |
||
| [http://subforge.org/projects/subtle/wiki Subtle] || Ruby || {{tableYes}} || Dynamic grid tiling and stacking || {{tableYes}} |
| [http://subforge.org/projects/subtle/wiki Subtle] || Ruby || {{tableYes}} || Dynamic grid tiling and stacking || {{tableYes}} |
||
Line 47: | Line 47: | ||
With repl, users can run their own scripts on-the-fly. Repl stands for "read-eval-print-loop". |
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. |
* '''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 |
+ | * 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 '''Awesome''', you can use "awesome-client" command. |
||
* In '''Subtle''', you can use either [http://subforge.org/projects/subtle/wiki/Subtler subtler] (subtle remote) on the commandline or the Ruby extension [http://subforge.org/projects/subtle/wiki/Subtlext subtlext] in a custom script. |
* In '''Subtle''', you can use either [http://subforge.org/projects/subtle/wiki/Subtler subtler] (subtle remote) on the commandline or the Ruby extension [http://subforge.org/projects/subtle/wiki/Subtlext subtlext] in a custom script. |
||
Line 62: | Line 62: | ||
{| class="wikitable" |
{| class="wikitable" |
||
|+Comparison of visual effects |
|+Comparison of visual effects |
||
− | |+Comparison of visual effects |
+ | |+Comparison of visual effects<!-- Dunno why, but GUI editor of this site duplicates the caption. It doesn't harm, though.--> |
! Window Manager |
! Window Manager |
||
! Configurable titlebar / Themable |
! Configurable titlebar / Themable |
||
Line 75: | Line 75: | ||
| {{tableYes|Yes. sawfish-pager understands lisp, and communicates with the window manger in lisp.}} || No (But there's "apps-menu". See below.) || {{tableYes|Yes (yet primitive)}} || ? |
| {{tableYes|Yes. sawfish-pager understands lisp, and communicates with the window manger in lisp.}} || No (But there's "apps-menu". See below.) || {{tableYes|Yes (yet primitive)}} || ? |
||
|- |
|- |
||
− | | CLFSWM || {{tableNo| |
+ | | CLFSWM || {{tableNo|No. All can be changed is colors.}} || {{tableNo}} || No, you don't need one. "You're in pager". || No, but there's the application launcher menu. See below. || No. You don't need tabs in CLFSWM. || {{tableYes|Yes, with an external manager such as xcompmgr}} |
|- |
|- |
||
| StumpWM || {{tableNo}} || {{tableNo}} || ? || ? || {{tableNo}} || ? |
| StumpWM || {{tableNo}} || {{tableNo}} || ? || ? || {{tableNo}} || ? |
||
Line 101: | Line 101: | ||
=== Configuration with GUI === |
=== Configuration with GUI === |
||
− | In Sawfish, basic configurations can be done via GUI, which includes |
+ | 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. |
+ | 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. |
− | |||
− | It profits both for newbies and experienced users. |
||
=== Pager === |
=== Pager === |
||
Line 120: | Line 118: | ||
{| class="wikitable" |
{| class="wikitable" |
||
|+Comparison of inputs |
|+Comparison of inputs |
||
+ | |+Comparison of inputs<!-- Dunno why, but GUI editor of this site duplicates the caption. It doesn't harm, though.--> |
||
− | |+Comparison of inputs |
||
! Window Manager |
! Window Manager |
||
! Supports [[#XKB|XKB]] |
! Supports [[#XKB|XKB]] |
||
Line 161: | Line 159: | ||
=== Input translation per window === |
=== Input translation per window === |
||
− | In '''Sawfish''', you can configure each window with "key translation". |
+ | In '''Sawfish''', you can configure each window with "key translation". For example, by typing <code>Control-X</code> on the xterm, it'll turn into <code>Y</code>. |
+ | |||
+ | For example, you can choose "ctrl-q" to close all applications, even for softwares that don't allow key-binding configuration. |
||
=== Extra mouse features === |
=== Extra mouse features === |
||
Line 171: | Line 171: | ||
{| class="wikitable" |
{| class="wikitable" |
||
|+Comparison of screen related issues |
|+Comparison of screen related issues |
||
− | |+Comparison of screen related issues |
+ | |+Comparison of screen related issues<!-- Dunno why, but GUI editor of this site duplicates the caption. It doesn't harm, though.--> |
! Window Manager |
! Window Manager |
||
! Supports [[#Large desktop|large desktop]] |
! Supports [[#Large desktop|large desktop]] |
||
Line 197: | Line 197: | ||
=== Large desktop === |
=== 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. |
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 === |
=== Multiple monitors === |
||
Line 207: | Line 209: | ||
{| class="wikitable" |
{| class="wikitable" |
||
|+Comparison of community and development status |
|+Comparison of community and development status |
||
− | |+Comparison of community and development status |
+ | |+Comparison of community and development status<!-- Dunno why, but GUI editor of this site duplicates the caption. It doesn't harm, though.--> |
! Window Manager |
! Window Manager |
||
! Good Quickstart Guide |
! Good Quickstart Guide |
||
Line 254: | Line 256: | ||
=== CLFSWM === |
=== CLFSWM === |
||
+ | (Next) key bindings are shown on the screen, so easy to use for newbies. |
||
+ | |||
=== StumpWM === |
=== StumpWM === |
||
Line 282: | Line 286: | ||
=== Qtile === |
=== Qtile === |
||
− | Qtile's memory leak issue |
+ | (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 === |
=== Subtle === |
Revision as of 09:25, 15 August 2012
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 | Python2 | No | Dynamic = Tiling and Stacking | ? |
Subtle | Ruby | Yes | Dynamic grid tiling and stacking | 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.
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.
Some don't have Repl:
- In XMonad, user-written xmonad codes need compilation, although GHC, the Haskell compiler, has repl.
- In Qtile, you have to restart.
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 | No. All can be changed is colors. | No | No, you don't need one. "You're in 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 | ? |
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 |
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 |
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.
Screen comparison
Window Manager | Supports large desktop | Supports multilple monitors |
---|---|---|
Sawfish | Yes | Xinerama (treat as one big screen), only primitive. |
CLFSWM | No | Yes |
StumpWM | ? | ? |
Xmonad | No? | Yes |
Awesome | No | Yes |
Qtile | No? | Yes |
Subtle | 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" (what's "tag" exactly?) 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 |
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, liprep, 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] [ttp://bugs.ruby-lang.org/issues/3919].
Others
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