X Window Management - Jewel

As with all good projects, this one starts because I need to
'scratch an itch', so to speak. That itch is the need for a good
window manager which I can use as the basis for a good user
interface for my computer. I know that there are others out there,
but I think they're all deficient in one way or another. If I had a
week to write it down, I'd tell you all about it, but you're not my
psychiatrist.

Once upon a time, there was a good window manager released by
Frank Hale's sapphire
project, but it wsa killed off for a rewrite that then moved
too conservatively for my liking. This window manager started as a
fully-patched version of Frank's aewm++, but it hopes to grow
beyond that. Already, many improvements were made to the C++ code,
including adoption of the STL.

Now we're about to make the big jump. The C++ code is being left
behind and we're going to try a similar model in Objective-C, which
some of us think is a much easier OO language for systems
programming like this. There will be one last summary C++ release
and then only bugfixes if really needed.

Here you will be able to find code for download, links to other
useful sites and ideas about window management as it develops, in
that order. First, a (old) screenshot is here: 200k image.

All functions should be accessible from keyboard and other
programs via standard protocols where possible;

Try to make things easy first and then look good;

All program code should be fully documented;

There should be an easy user introduction guide.

If you want more detail about any of the ideas set out here,
please ask on the
mailing list. Basically, I believe that the window management
system should be modular so that you can add, remove or exchange
features and the ways they are provided as you see fit. When I say
modular, I mean as seperate processes initially, rather than having
to use dynamic loading or select what features to have at compile
time. This should also make it very easy to debug new advanced
features, because they will be prevented from killing the window
manager by the brute force isolation.

The window manager is written in C++. How did we end up there?
Well, I've reluctantly ruled out my normal programming language
because we're interfacing with libraries that are basically C and
the window manager is an important part of the system that should
be kept as responsive as possible. Writing it in C is too much
overhead, though, as there's a lot of metadata to keep track of and
it's far too easy for a little memory leak to sneak in. The problem
of keeping track of window objects while other interface objects
act on them seems to map easily to an object-orientated programming
approach, so an OO language based on C seems the logical choice.
That leaves use Objective-C or C++. Objective-C is interesting and
probably possible, but we've more talented C++ programmers to draw
upon and it is more widespread at the moment, so C++ is where the
journey is, for now at least. (Update: see above ;-) )

As to interface theories? I'll write more about them later.
Suffice it to say that I'm looking for the best of many worlds to
try to get something that's obvious enough that someone
computer-literate but not necessarily X-literate can get started
quite quickly, while still allowing all the features that advanced
users want to make their life easier. A lot of the ideas come from
years of following web usability work from W3C WAI, useit, asktog and others.

Some of my other ideas appear in the feature request tracker on
the sapphire
project page, which is nice. Keep watching for more
developments. If any of them warrant a bit more explanation, I'll
post it here.

Brett has started work on this, apparently, while I clean up the
web and my version control systems. I don't even know how to get
the source yet. Please ask on the mailing list. As soon as I know,
you'll see it here, too.

WindowC - This is a small scheme-based
scripting language for controlling windows. It should work with
most window managers, although not all seem to respond to all
functions properly. Some small example scripts are included,
although at least one causes one early window manager to leak. Keep
a close eye on it when you try it out! Improvements in 0.8 include
a few function name changes to be more scheme-like and some small
improvements to the included demos. windowc-0.8.tar.gz