aewm - An Exiguous/Exegetic Window Manager
----------------------------------------------------------------------

aewm is a minimal window manager for X11. It is extremely light on
features and memory usage, and suitable for slower or embedded systems.
It is also intended to provide an example implementation of most of the
ICCCM and some of the EWMH, in a simple and clear way, so that you can
easily hack on it or appropriate its code for another program.

It is not, however, an obsessively complete "reference" implementation;
features that are distracting or unnecessary have been skipped. The user
interface is minimal, and as much of it as possible is implemented in
separate clients.

Installation
----------------------------------------------------------------------

Before compiling, look in ``src/Makefile'' and enable any options your
system supports. Optionally, change any of the default settings in
``src/aewm.h'' (DEF_FONT, in particular, should be something that will
always exist on your server). Then, run ``make; make install''.

Usage
----------------------------------------------------------------------

aewm adds a small frame containing the window's name to each window, with
a small box in the upper-right corner. All operation are performed with
the mouse, as follows:

Button  Frame   Box
=======================
1       Raise   Iconify
2       Move    Resize
3       Lower   Kill
4       Shade   Zoom
5       Unshade Unzoom

Button 2 operations require a click, hold and drag; all others are a
single click. Iconified windows are unmapped, and their management is
left up to other clients.

Clicking any button on the root window will launch another client. By
default, these are:

Button  Client
=======================
1       aemenu --switch
2       xterm
3       aemenu --launch
4       aedesk -1
5       aedesk +1

Newly mapped windows are placed relative to available space based on the
relative position of the mouse on the entire screen. If interactive
mapping is turned on with -map, you can move the mouse to change this
position before clicking to set it. Using button 1 for this click will
map the newly created window on top of the stack, button 3 on the
bottom, and button 2 will start a resize operation.

Virtual Desktops
----------------------------------------------------------------------

Versions from 1.3.0 on support virtual desktops, as defined by the EWMH
specification. Switching from one desktop to another, or setting the
number of desktops available, is accomplished by sending a message to
the root window; the included client ``aedesk'' can be used for this.

To move an existing client to a different desktop, set the appropriate
property on that window. The ``xprop'' command in the X11R6 distribution
can do this interactively, with e.g. ``xprop -f _NET_WM_DESKTOP 32c -set
_NET_WM_DESKTOP 0''.

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

The ``clients'' subdirectory contains several other clients which can be
used together to provide a usable windowing environment. ``aemenu'' pops
up a menu of programs to be launched, or (when given the ``--switch''
option) other currently running clients. ``aepanel'' stays at the edge
of your display and uses buttons to represent other clients. It also
allows you to open the same menu of programs.

Their config file will be searched for in ``~/.aewm/clientsrc''
and then ``/etc/X11/aewm/clientsrc''. an example is provided in
``doc/clientsrc.ex''.

When using aemenu, you can just exec aewm in your ``~/.xsession''
script, but if you prefer to use aepanel, or want to switch/restart
window managers without closing your X session, you can start aewm in
the background and exec aepanel or aesession instead. (aesession is a
program which does nothing but hold the X session open and reap child
processes.)

Keyboard Bindings
----------------------------------------------------------------------

aewm does not grab any keys. This is by design, and recommendation of
the ICCCM. Instead, you can use xbindkeys (which is unfortately not
included in the stardard X distribution). For example, in
``~/.xbindkeysrc'':

    "xwit -opposite -current"
        Alt + Tab
    "aedesk 0"
        Alt + F1
    "aedesk 1"
        Alt + F2

(This "alt-tab" is not quite as useful as GNOME's. Properly circulating
only managed, non-panel, non-taskbar-skipped windows would require a
client that recognizes those EWMH hints, as X's native window
circulation support works on a much lower level.)

Other Caveats
----------------------------------------------------------------------

aewm does not set the root cursor. To do this, you can do something
like ``xsetroot -cursor_name left_ptr.''.

There is no -display option, since there is no stardard way to pass this
on to child processes. Instead, use ``DISPLAY=host:0 aewm''.

The Makefiles may cause problems with older versions of tradional make.
Try upgrading first, or substitute ``gmake'' for ``make''.

You may want to adjust with NAME_SIZE in aepanel, as larger values can
cause large buttons to crowd out smaller ones, but smaller values can
reduce readability.

Acknowledgements
----------------------------------------------------------------------

This project would have been nearly impossible without the greatly
appreciated work of David Hogan in creating 9wm, on which I based my
design. I can't thank him enough. Sadly, David passed away in 2003. A
memorial page for him can be found at <http://unauthorised.org/dhog/>.

Thanks to Christophe Tronche for HTML-ifying the ICCCM and other
essential X documentation, available at <http://www.tronche.com/gui/x/>.

Adam Sampson <ats@offog.org> wrote the initial code for MWM hints, Xft
support, and menu-ified goodies.

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

Copyright 1998-2007 Decklin Foster <decklin@red-bean.com>. This program
is free software; please see LICENSE for details.

aewm's web page is at <http://www.red-bean.com/~decklin/software/aewm/>.
