This is David Hogan's 9wm updated to behave more like 
Plan 9's rio.  Since I cannot get approval for the changes
and I'd prefer not to resort to patches, I have renamed it "rio".

Current incompatibilities that would be nice to fix:

- The command-line options should be made more like Plan 9.

- Should work out a protocol between 9term and rio so that:
	* 9term can tell rio to blue its border during hold mode

- Should change window focus on b2/b3 clicks and then
  pass along the click event to the now-focused window.

- Should change 9term to redirect b3 clicks to rio so that rio
  can put up the usual b3 menu.

Axel Belinfante contributed the code to handle border grabbing
for resize.

The original README is below.

- russ cox
rsc@swtch.com
30 march 2004


                           9wm Version 1.2
                   Copyright 1994-1996 David Hogan.

What is 9wm?
============

9wm is an X window manager which attempts to emulate the Plan 9 window
manager 8-1/2 as far as possible within the constraints imposed by X.
It provides a simple yet comfortable user interface, without garish
decorations or title-bars. Or icons.  And it's click-to-type.  This
will not appeal to everybody, but if you're not put off yet then read
on.  (And don't knock it until you've tried it.)

One major difference between 9wm and 8-1/2 is that the latter provides
windows of text with a typescript interface, and doesn't need to run a
separate program to emulate a terminal.  9wm, as an X window manager,
does require a separate program.  For better 8-1/2 emulation, you should
obtain Matthew Farrow's "9term" program (ftp://ftp.cs.su.oz.au/matty/unicode),
version 1.6 or later (earlier versions don't cooperate with 9wm in
implementing "hold mode").  Of course, you can run xterm under 9wm as well.

What is 9wm not?
================

9wm is not a virtual window manager.  It is not customisable to any
great extent.  It is not large and unwieldy, and doesn't use the X
toolkit.  Requests to make it any of these things will be silently
ignored (or flamed if I have had a bad day :-)  If you want tvtwm
or mwm, you know where to get them...

Where do I get it?
==================

The latest version of 9wm is held at ftp://ftp.cs.su.oz.au/dhog/9wm

Author
======

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/~dhog/).

Licence
=======

  9wm is free software, and is Copyright (c) 1994-1996 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.

How do I compile/install it?
============================

Assuming your system is correctly configured, you should only need to
run xmkmf to generate the Makefile, and then run make or make install.
make install.man should copy the manpage (9wm.man) to the appropriate
directory.

If the make fails, complaining that the function _XShapeQueryExtension
does not exist, try removing the "-DSHAPE" from the Imakefile, and
run xmkmf and make again.

If you don't have imake, or it is misconfigured, or you would prefer
not to use it, try copying the file "Makefile.no-imake" to "Makefile",
then edit the definitions in this Makefile to suit your system.  This
may require defining suitable compilation flags for your system
(normally imake does this for you).  For instance, on AIX you must
include "-DBSD_INCLUDES" in CFLAGS.

How do I use it?
================

See the manual page for details.  You should probably read the
man page for 9term as well.

What if I find a bug?
=====================

Please mail all bug reports to 9wm-bugs@plan9.cs.su.oz.au, so
that I can incorporate fixes into the next release.  If you can
tell me how to fix it, all the better.

Known Problems/Bugs
===================

9wm tries hard to emulate 8-1/2, but isn't 100% compatible.  If
you are an experienced 8-1/2 user, please be patient with it.

One intentional difference between 9wm and 8-1/2 is in the behaviour
of the menu when the last hidden item is unhidden.  Under 8-1/2, when
the menu is next used, it pops up with "New" selected.  Under 9wm,
the (new) last menu item will be selected.  This is a feature.  It
may be confusing if you frequently switch between 9wm and 8-1/2.
If you don't like this feature, email me for the one line fix.

There have been some problems encountered when resizing 9term on
some platforms.  This turns out to be a problem in 9term (actually
in libXg, to be precise).  Newer versions of 9term should be
immune to this, see matty@cs.su.oz.au if your 9term needs fixing.

Some client programs do weird things.  One of these is Frame Maker.
It appears that if it has a modal dialog on the screen, then if any
of its windows are current, all keypresses are redirected to the
modal dialog.  This is not 9wm's fault -- Frame Maker is doing this.

Programs like Netscape Navigator like to put riddiculously long
icon name properties on their windows, of the form "Netscape: blah blah".
There is no way that I know of to stop netscape from doing this.  For this
reason, 9wm truncates labels at the first colon it finds.  This keeps the
button 3 menu from becoming excessively wide.  Note that with same
applications, you can use an iconName resource to set the label; this
works well for "xman", whose default icon name of "Manual Browser"
is a tad too long.

See Also
========

http://www.cs.su.oz.au/~dhog/
    The 9wm Home Page

ftp://ftp.cs.su.oz.au/matty/unicode/
    for source to 9term (get README first)

ftp://plan9.att.com/plan9/unixsrc/sam/
    for source && info on Rob Pike's editor "sam"

ftp://rtfm.mit.edu/pub/usenet/news.answers/unix-faq/shell/rc
    for information on a publically available implementation
    of the Plan 9 shell "rc" for unix (or look in comp.unix.shell).

ftp://viz.tamu.edu/pub/rc
    for source to the abovementioned implementation of rc.

http://plan9.att.com/plan9/
http://plan9.att.com/magic/man2html/1/8%c2%bd
    for information on Plan 9 (including the 8-1/2 manual entry)

Acknowledgements
================

Thanks to Rob Pike for writing the original 8-1/2 program (and
before that, mux) which inspired the writing of 9wm.

Thanks to John Mackin, whose gwm "wool code" for emulating mux
was also an inspiration: I used it (and hacked it) until I got
too frustrated with gwm's large memory requirements and lack of
speed (sorry Colas!), and decided to write a dedicated program.

Thanks to Matthew Farrow for writing 9term.

A big thanks to Dave Edmondson for adding support for
multi-screen displays.

The following people helped beta test 9wm:

	John Mackin
	Noel Hunt
	Fred Curtis
	James Matthew Farrow
	Danny Yee
	Arnold Robbins
	Byron Rakitzis
	micro@cooper.edu
