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. 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. ;-)

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.

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 and
menu-ified goodies.

License
======================================================================

Copyright (c) 1998-2000 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 ;-).
