aewm - An X11 Window Manager
----------------------------------------------------------------------

aewm is a minimalist 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.

The other 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, it is distributed under an X11-style
license, in order to be compatible with whatever DFSG-free license you
prefer.

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.

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 included clients for that.

Clients
----------------------------------------------------------------------

The clients/ 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. `aemenu' pops up a menu of programs to be launched, or (when
given the --switch option) currently running clients. `aepanel' stays
at the edge of your display and uses buttons to represent running
clients. It also allows you to open the same menu of programs. Each
program has a -gtk and -xaw version.

Their config file looks like this:

    # A comment
    cmd "Run XTerm" "xterm"
    cmd "Mozilla" "mozilla >/dev/null"
    menu "A submenu"
        cmd "The GIMP" "gimp"
    end

Blank lines and indentation can be added for readability; both are
ignored. The various programs will try to read ~/.aewm/clientsrc
first, and then /etc/X11/aewm/clientsrc if the first file doesn't
exist.

The default layout of aepanel-gtk is rather inflexible (this will be
fixed, eventually). aepanel-xaw, 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 aepanel-xaw:
(change `1280' to the width of your screen and `30' to whatever is
appropriate for your font.)

    AePanel.geometry:               1280x30+0+0
    AePanel.overrideRedirect:       True
    AePanel*orientation:            Horizontal
    AePanel*showGrip:               False

When using aemenu, you can just exec aewm in your ~/.xsession script,
but if you prefer to use a aepanel, this is probably better:

    #!/bin/sh
    aewm &
    exec aepanel

If you prefer aemenu over aepanel 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), `aesession' is a low-memory process
that will simply reap any children it inherits from ~/.xsession and
then sleep.

    #!/bin/sh
    aewm &
    exec aesession

In this case, my ~/.aewm/clientsrc contains the line `Logout=skill
aesession'. (kill `pidof aesession` 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. ;-)

aepanel-xaw uses 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 (unless you
are able to compile GTK+ against it).

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 aepanel. I haven't quite
decided on an optimal value yet. I might try 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.

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.

Author
----------------------------------------------------------------------

aewm is maintained by Decklin Foster <decklin@red-bean.com>. If you
have bug reports, comments, flames, or are just bored, send me email.
Copyright 1998-2003 Decklin Foster. Please see LICENSE for license.
