Introduction
Heliwm is designed and developed to be one of the smallest and lightest window managers in the world of X. I believe that saving memory and CPU time contributes to less electricity consumption, thus saving natural resources.
It simply provides essential window management operations: move, resize, iconify, raise, lower, focus change, maximize. No menus, gorgeous look, virtual screens, etc. It can even be compiled without window frames, to further reduce resource requirement. Heliwm is for those of you who want to spend minimum amount of computer resources for a window manager.
Here is a screen shot.
Package and License
The latest version (1.13) is available under the license below.
- heliwm-1.13.tar.gz (26,178 bytes)
MD5: c3245228bf6351d4db6d85e198962ad1
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Hidetoshi Ohtomo
Heliwm is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
Heliwm is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
The license can be found at www.gnu.org/copyleft/gpl.html.
Design
Following strategies were taken in order to make the program small and/or lessen CPU load:
- Extensive use of compile time options
- To make it possible to minimize heliwm according to individual needs, following features are optional (see "Compile Time Options" section below): window frame drawing (FRAME), configuration file parser (RCPARSER), native language system support (NLS), shape extension support (SHAPE), window maximizing operation (MAXIMIZE), window management list reordering operation (REORDER).
- No intelligent automatic icon placement
- When a window is first iconified, the icon is placed at where the window is, or a user must determine where to place the icon, depending on the specified option.
- Rather cryptographic configuration file (like sendmail.cf :-)
- Configuration file syntax is not so intuitive and quite strict to minimize parsing module.
- Simple frame decoration
- Frame decoration is not gorgeous, and there is no decoration when compiled without FRAME option.
- Lack of safeguards for rare cases
- For example, upon startup, heliwm doesn't check if another window manager is running. Also, when malloc(3) fails, it simply exits silently, since such a case seems to be very rare.
For your reference, here is output from size(1) and ps(1) under Linux:
text data bss dec 9908 4840 172 14920 heliwm # 1.9 alpha particle 9796 4778 176 14750 heliwm # 1.10 alpha particle 9756 4818 264 14838 heliwm # 1.11 alpha particle 10368 4787 260 15415 heliwm # 1.12 alpha particle 15024 5927 192 21143 heliwm # 1.9 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE 14920 5861 188 20969 heliwm # 1.10 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE 14928 5899 276 21103 heliwm # 1.11 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE +REORDER 15484 5864 280 21628 heliwm # 1.12 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE +REORDER 98948 14475 4620 118043 fvwm # 1.23b 129460 35042 7300 171802 olwm 99780 30975 82956 213711 twm 214060 58114 147092 419266 olvwm TRS DRS SIZE SHRD COMMAND 28 724 752 616 heliwm # heliwm 1.9 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE 28 724 752 616 heliwm # heliwm 1.10 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE 28 724 752 616 heliwm # heliwm 1.11 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE +REORDER 28 756 784 652 heliwm # heliwm 1.12 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE +REORDER 116 732 848 664 fvwm 132 1388 1520 1060 twm
Compile Time Options
There are several compile time options, each of which adds extra code to heliwm. Choose necessary ones only, to minimize resulting binary.
- FRAME
- If heliwm is compiled without this option, it is called alpha particle version. It doesn't draw window frame around client windows to save resources.
- RCPARSER
- Configuration file parsing capability. Without this option, heliwm can only use its hard-coded configuration information.
- NLS
- Native Language System support. In order to use character sets other than ISO-8859-1 for window and icon titles, set environmental variable LANG to name of your locale.
- SHAPE
- X non-rectangular window shape extension support. Clients such as oclock(1) and xeyes(1) are written using the extension, but can be run without it. Some non-rectangular windows generate many X events upon exposure, and can be a burden to CPU, so compile heliwm without this option, if you would.
- MAXIMIZE
- Optional automatic window maximizing feature. Window maximizing can be done manually with resizing, so if you want to save resources, compile heliwm without this option.
- REORDER
- Optional window management list reordering feature. The list is used to move pointer from one window to another in a order. By using this feature, it is possible to bring a window to the top of the list.
In the list above, there are only six options, but there are seven. One of them is undocumented. For details, "Use the source, Luke." :-)
Changes
- 1.13 (3 March 2006)
-
- Added horizontal and vertical maximize operations.
- Changed default of REDRAW_ACTIVE_WINDOW_ONLY to off.
- 1.12 (9 February 2005)
-
- Added pointing device support for move and resize operations (finally!). Now all operations can be done using both keyboard and pointing device.
- 1.11 (1 June 2003)
-
- Added REORDER compile time option.
- Disclosed VERBOSE code, though undocumented.
- Refined code extensively.
- Removed unnecessary free(3) in terminate().
- Changed target installation directory of heliwmrc from /usr/lib/X11/heliwm to /usr/X11R6/lib/X11/heliwm.
- Changed default key binding for "previous" operation from Alt-Return to Alt-Shift-Tab.
- 1.10 (3 May 2002)
-
- Improved the code and reduced the binary size by less than 1%, while improving resize operation for clients with {width,height}_inc greater than 1 (e.g., xterm).
- 1.9 (22 January 2002)
-
- Added RCPARSER compile time option.
- Added a built-in key bind table.
- Changed a couple of default key bindings.
- 1.8 (20 October 2001)
-
- Added interactive placement option.
- 1.7 (16 August 2001)
-
- Fixed another focus-related bug, which didn't pass focus to gimp(1) and possibly other clients participating WM_TAKE_FOCUS.
- 1.6 (19 June 2001)
-
- Improved frame drawing routine; changed several configuration keys accordingly.
- Added REDRAW_ACTIVE_WINDOW_ONLY option.
- By prohibiting delete operation on icon windows, fixed a bug which caused an X protocol error upon executing the operation on a client-supplied icon.
- Improved find_window().
- 1.5 (20 May 2001)
-
- Added SET_ORIGINAL_BORDER_TO_ZERO option.
- Changed to free created background pixmap immediately after creating icon window with it.
- 1.4 (29 April 2001)
-
- Fixed a bug, which seldom prevented change of focus.
- 1.3
-
- Added cursor configuration.
- Added installation procedure of heliwmrc to Imakefile.
- 1.2
-
- Added MAXIMIZE compile time option.
- Passed gcc(1) `-pedantic' option.
- 1.1.0
-
- Added NLS compile time option.
- 1.0.3
-
- Fixed a PMinSize-related bug.
- 1.0.2
-
- Fixed a bug which caused memory leak.
- 1.0.0 (30 December 2000)
-
- First public release.
Naming
First of all, I must confess that I have pronounced "-wm" suffix almost same as "-um," since about a year after my first experience with X Window System. So, for example, I pronounced fvwm as "ef-vee-um" and twm as "toom" when I read them in documents and articles. When I talk to other people, though, I pronounced "F-V-W-M" and "T-W-M" as many people do, in order to avoid unnecessary arguments.
When I decided to write this software in summer of 2000, I named it lithiwm, after the third lightest element, lithium. I chose lithium because it is the lightest metal element, and my objective was to create one of the lightest window manager. But a few days (or was it a few weeks?) later, I thought that I don't have to limit myself to metal elements, so I changed the name to heliwm, after the second lightest element, helium. Thus, I pronounce heliwm exactly same as helium. By the way, you may wonder why I didn't select the lightest element. The reason is simple: hydrogen doesn't end with "-um" suffix.
The FRAME option was one of the first compile time options, so it seemed nice to use alpha particle as the name for a binary without the option (for those of you who aren't familiar with chemistry: an alpha particle is a helium element without electrons).
It was only then that I began thinking what "HELIWM" should stand for, as many acronym makers did (I don't believe that acronyms such as VERONICA and AEGIS were made coincidentally). "WM" stands for "window manager," as other window managers. "L" for "Light" was easy; "H" for "Highly" after a day or two; "E" for "Essential" after looking up my thesaurus; "I" for "Itsy-bitsy" was chosen when I asked my family at lunch (thank you, Yuki).
Heliwm shares some characteristics with helium: light, small, stable (I hope), etc. But there is one aspect which I don't want heliwm to share: rare in earth's atmosphere. :-) So if you like heliwm, please tell about it to your friends, and help me spreading it over the world.
Wanted
If you tried heliwm, please tell me how you felt about it via email (see below). Even a line of response can be a great encouragement and motivation toward improving the software.
You can also make my day by sending me one or more of the following:
- your idea on what HELIWM stands for (funny ones are welcome, too)
- your customized .heliwmrc
- output of "heliwm -v"
- output of "uname -a"
- output of ps(1), gprof(1) and/or time(1)
- improvement ideas/suggestions
- bug fixes, if any
I'm looking forward to hear from you.
Nature Oriented Computing
Heliwm is written in the hope of saving natural resources by its low computer resource requirement. People who want to contribute to nature protection may want to use this window manager instead of other heavy, gorgeous-looking ones.
Please take a look at my document, Nature Oriented Computing, for more information on how to save the resources.