aewm - An Exiguous 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, so it should be useful if you want to hack
on your WM directly rather than deal with a complicated configuration
system. It is not, however, a complete, to-the-letter "reference"
implementation; features that are inessential or that would distract
from more important parts of the code have been sacrificed for the sake
of clarity, and the user interface is limited to functions that cannot
be concisely implemented in separate clients.

Yes, the name is a backronym. It's also a bad Latin/Greek pun (for which
I apologize.)

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

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

Before compiling, it is a good idea to read the -DFOO and DEF_BAR
options in the Makefile and aewm.h, respectively. DEF_FONT, in
particular, should be something that will always exist on your server.

Neither imake nor autotools are used, so apart from that, it is a simple
matter of ``make; make install''.

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

aewm adds a small bar containing the window's name and a small box in
the upper-right corner to the top of each window. To raise or lower a
window, click the left or right mouse button, respectively, on the main
portion of the bar. To move a window, click the middle button somewhere
in the same space, hold, and drag.

To iconify or close a window, click the left or right button
(respectively) in the box in the corner. To resize a window, hold and
drag the middle mouse button in the box. ("Iconify", in this case,
really means "hide", as aewm does not map any icon windows and leaves
deiconification up to other clients.)

Holding Shift and middle-clicking in the box will zoom the window to
the maximum size available, and doing the same in the rest of the bar
will ``shade'' the window and only show the title.

Clicking any button on the root window will launch another client. By
default, these are (from left to right) ``aemenu'', ``xterm'', and
``aemenu --switch''. They can be changed with the -new1, -new2, and
-new3 options.

aewm places newly mapped 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. If interactive mapping is turned on with -map,
you can move the mouse to change this position before clicking to set
it.

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. Each program has a -gtk
and an -xaw version.

Their config file, which will be searched for in ``~/.aewm/clientsrc''
and then ``/etc/X11/aewm/clientsrc'', looks like this:

    # A comment
    cmd "Terminal" "xterm"
    cmd "Firefox" "firefox"
    menu "Graphics"
        cmd "The GIMP" "gimp"
    end

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 the 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.''.

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'.

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-2006 Decklin Foster <decklin@red-bean.com>. This program
is free software; please see LICENSE for details.
