aewm - An X11 Window Manager ====================================================================== aewm is a minimalistic window manager for X11. I wrote it mostly to learn about X and the ICCCM, but also to fight software bloat. Instead of expanding to fill your entire "desktop environment", aewm's main purpose is to get out of your way and allow you to use other programs to control things like menus, icons, backgrounds, cursors, root backgrounds, and so on. It doesn't do "themes", or have much in the way of configuration. This is a philosophical statement; it's better to do your work than distract yourself with pretty little borders around it. I myself haven't changed the default background color in, well, ever. Another goal I had in writing aewm was to create an easily readable and hackable implementation of the ICCCM. While I'm not 100% there yet, I think I've at least made the dense jungle of Xlib a bit more understandable. You are encouraged to take the code and do your own thing with it. For this reason I chose a liberal license that should allow you to add your favorite GPL or BSD flavour if you see fit. I was planning on using the name "swim" (Simple WIndow Manager), but someone snapped that up while I was getting the code ready for general consumption. "ae" doesn't really stand for anything, but I am a big fan of Autechre. ;-) The latest release is at http://www.red-bean.com/~decklin/aewm/. Installation ====================================================================== Before compiling, check the default (DEF_foo) options in aewm.h, and the defines in the Makefile. DEF_FONT is of particular interest; make sure that it is defined to something that exists on your system. You can turn -DSHAPE off if you don't have the Shape extension, and -DMWM_HINTS on if you have the Lesstif or Motif headers installed. "make" will compile everything, and "make install" will install it. The goodies/ directory must be compiled separately. I've decided not to use imake or autoconf because the Makefiles they generate are nearly impossible to read, and I wanted to learn how to do it myself. If you need to hack the Makefile in order to get it to work, please email me so I can take your configuration into account. Using It ====================================================================== aewm adds a titlebar with a small box on the right to each window. The availible commands are as follows: Button Titlebar Box ------ -------- -------- 1 Raise Hide 2 Move Resize 3 Lower Delete Each button will also start a different program when you click on the root window. These programs can be defined with the -new1, -new2, and -new3 options. aewm places new windows based on the position of the mouse. If your mouse is in the center of the the screen, a new window will be centered; as you move the mouse to a side or corner, the position of the window will move there. Please note that there is no `unhide' operation to undo the `hide' operation. You'll need one of the goodies for that. Goodies ====================================================================== The goodies/ subdirectory is home to several programs that I use to "glue together" my X session. Like aewm, each is simple and sticks to its job. Here's what they do: *-panel: Start a program. *-switch: Bring an open or iconified window to the top. *-menu: Like the above, but use a menu instead of buttons. *-palette: Keep a running list of windows, and start programs as well. Both GTK and Xaw versions are included. Panel and palette read the list of programs to be started from ~/.paletterc. This file should contain lines in the form `Label=command', like this: Rxvt=rxvt Mutt=rxvt -e mutt -y Netscape=netscape -no-about-splash The default layout of gtk-palette is rather inflexible. xaw-palette, OTOH, allows for customization with X resources, but can be frustrating to use in its default state. Here is a good starting point, which makes it look somewhat like gtk-palette: (change `1280' to the width of your screen and `30' to whatever is appropriate for your font.) Palette.geometry: 1280x30+0+0 Palette.overrideRedirect: True Palette*orientation: Horizontal Palette*showGrip: False When using panel/switch, you can just exec aewm in your ~/.xsession, script, but if you prefer to use a palette, this is probably better: #!/bin/sh aewm & exec xaw-palette If you prefer to use panel/switch as I do, but still want to be able to restart your WM without restarting X (this really comes in handy when debugging a window manager), `xsession' is a low-memory process that will simply reap any children it inherits from ~/.xsession and then sleep. #!/bin/sh aewm & exec xsession In this case, my ~/.paletterc contains the line `Logout=skill xsession'. (kill `pidof xsession` also works.) Caveats ====================================================================== aewm does not set the root cursor. This is *not* the window manager's job, and I feel rather religiously about that. I use this command to set it: `xsetroot -cursor_name left_ptr'. aewm is really not meant for 2-button mice. If you are stuck with one, make sure you can emulate a third button by chording, and try running xmodmap -e 'pointer = 1 3 2'. This will make your right button be #2, and a chord #3. I have a few 3 button mice lying around so you can always ask me to mail you one. ;-) Some goodies use XtRegisterDrawable, which is only available in X11R6. I don't know of any way to get the same functionality under X11R5, so if you have a very old X installation, you are out of luck. There hasn't been a -display option for a while, but since I have been asked: use `DISPLAY=foo aewm'. I dislike the use of an option which will just have to turned back into an environment variable and exported for child processes to work. The Makefiles may cause problems with non-GNU or out-of-date versions of make. If you have problems, try upgrading first, or just substituting `gmake' for `make'. You may want to fiddle with NAME_SIZE in the goodies. I haven't quite decided on an optimal value yet. I might think about shrinking it dynamically as more buttons are made. GTK seems to have problems with large buttons swamping out smaller ones. If you enable Xft support, be sure to edit /etc/X11/XftConfig and point "dir" at the actual location of your TrueType fonts. This is probably covered in the XFree86 documentation, but I didn't figure it out initially. ;-) Don't ask me about virtual desktops. I'm not touching them. In the near future, anyway. Acknowledgements ====================================================================== In case this sounds familiar, it is. This project would have been nearly impossible without the greatly appreciated work of David Hogan on 9wm, which I based my design on. I can't thank him enough. > The latest version of 9wm is held at ftp://ftp.cs.su.oz.au/dhog/9wm. > 9wm was written by David Hogan (dhog@cs.su.oz.au), a postgraduate > student at the Basser Department of Computer Science, University of > Sydney (http://www.cs.su.oz.au/basser_home.html). Thanks to Christophe Tronche for HTML-ifying the ICCCM and other essential X documentation (http://www.tronche.com/gui/x/). Adam Sampson <azz@gnu.org> wrote the initial code for MWM hints, Xft support, and menu-ified goodies. License ====================================================================== Copyright (c) 1998-2001 Decklin Foster. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND. IN NO EVENT SHALL THE AUTHOR BE HELD LIABLE FOR ANY DAMAGES CONNECTED WITH THE USE OF THIS PROGRAM. You are granted permission to copy, publish, distribute, and/or sell copies of this program and any modified versions or derived works, provided that this copyright and notice are not removed or altered. Portions of the code were based on 9wm, which contains this license: > 9wm is free software, and is Copyright (c) 1994 by David Hogan. > Permission is granted to all sentient beings to use this software, > to make copies of it, and to distribute those copies, provided > that: > > (1) the copyright and licence notices are left intact > (2) the recipients are aware that it is free software > (3) any unapproved changes in functionality are either > (i) only distributed as patches > or (ii) distributed as a new program which is not called 9wm > and whose documentation gives credit where it is due > (4) the author is not held responsible for any defects > or shortcomings in the software, or damages caused by it. > > There is no warranty for this software. Have a nice day. Author ====================================================================== aewm is maintained by Decklin Foster <decklin@red-bean.com>. If you have bug reports, comments, flames, want permission to change the license, or are just bored, send me email. Your messages are appreciated (but do read the thing above about virtual desktops ;-).