wmx -- another window manager =============================
wmx is another window manager for X. It is based on wm2 and provides a
similarly unusual style of window decoration; but in place of wm2's minimal
functionality, it offers many of the features of more conventional managers
in the most simplistic implementations imaginable. wmx is, however, still
barely configurable except by editing the source and recompiling the code.
This release ============
This is the sixth release, dating from April 2001.
Building wmx ============
You will need a Unix machine, X libraries and a C++ compiler such as gcc.
You will also need a mouse, preferably with three buttons. Your X server
and libraries must be R4 or newer and must support the Shape extension. If
you want to use frame background-pixmaps (see "Pixmaps" below), you will
need the Xpm header and library. As of this release, wmx should now work
with multi-screen displays.
wmx makes relatively heavy demands on the performance of your X server,
because of the use of shaped windows, but it shouldn't place too much of a
load on other aspects of your system.
Inspect the file Config.h. This lists everything that can be usefully
configured before building, with comments to tell you what means what.
Change the settings to something that looks suitable now, and ensure that
CONFIG_NASTY_FONT is set to something which is unlikely not to be found.
Having edited Config.h, run "configure" and then "make". This should build
wmx.
Using wmx =========
To run wmx, make sure you're not already running a window manager, make
sure the DISPLAY variable is correctly set and the X server is running, and
then execute the file "wmx". There are no command-line options or X
resources, and there is no start-up file. If your X server doesn't support
the Shape extension, wmx will exit (and will never work on your server); if
it can't find the required fonts or allocate the required colours, it will
also exit (but you should be able to fix this by changing the definitions
in Config.h and recompiling).
Available window manipulations are:
-- To focus a window: depends on the focus policy you selected
in Config.h before compiling. See "Focus policy", below.
-- To raise a window: click on its tab or frame, unless you have
auto-raise on focus set in Config.h.
-- To move a window: make sure it's in focus, then click and drag
on its tab.
-- To hide a window: make sure it's in focus, then click on the
button at the top of its tab.
-- To recover a hidden window: hold down left button on the root
window for the root menu, and choose the window you want.
-- To start a new xterm: use the first item on the left-button root
menu ("New"), unless you've disabled it in Config.h.
-- To delete a window: make sure it's in focus, click on the
button on the tab, hold the mouse button for at least a
second and a half until the cursor changes to a cross, then
release. (I know, it's not very easy. On the other hand,
things like Windows-95 tend to obscure the fact that most
windows already have a perfectly good Close option. If the
default delay doesn't suit you, change it in Config.h and
recompile.)
-- To resize a window: make sure it's in focus, then click and
drag on its bottom-right corner. For a constrained resize,
click and drag on the bottom-left or top-right corner of
the enclosing window frame.
-- To flip around amongst the windows on-screen: click with the right
mouse button on the root window or on any window's frame or tab.
-- To switch between desktops (or "Channels"): click with the middle
mouse button towards the top-right corner of the root window. A
big green number will be displayed showing which channel you are
currently on. Click again before this number disappears to change
to the next channel. If you click with the left button after the
first middle-button click, you will move down a channel instead
of up.
-- To move a window from one channel to another: click with the
middle mouse button on its frame, and then keep clicking until you
reach the channel you want to move it to.
-- To start a new application of your choice: use the middle mouse
button on the root window, anywhere other than the top-right
corner of the root window. If you have any executable programs in
your $HOME/.wmx directory -- or other directory named in
CONFIG_COMMAND_MENU -- they will be listed on a menu and you can
choose one to be started up. (You can add and remove programs
while wmx is running.) REMEMBER, $HOME/.wmx IS A DIRECTORY, not
a file, so please don't write to me asking what the file format is.
-- To exit from wmx: move the mouse pointer to the very edge of the
screen at the extreme lower-right corner, and click left button on
the root window for the root menu. The menu should have an extra
option labelled "Exit wmx"; select this.
All move and resize operations are opaque.
Keyboard controls =================
By popular request, there are now some keyboard controls available. The
key combinations are configurable in Config.h -- the most important one is
that for the Alt modifier. The default bindings are:
-- To raise the focused window in the stacking order: Alt/cursor-Up
-- To lower the focused window: Alt/cursor-Down
-- To flip through the windows on screen: Alt/Tab (equivalent to
clicking the right mouse-button on the focused window's frame)
-- To hide the focused window: Alt/Return
-- To delete the focused window: Alt/BackSpace
-- To expand the focused window to the full height of the screen:
Alt/PageUp
-- To contract the focused window after expanding it: Alt/PageDown
-- To expand the focused window to the full screen (maximise):
Alt/Home
-- To contract the focused window after expanding it (unmaximise):
Alt/End
-- To expand the focused window to the full width of the screen:
Alt/KP_Add (numeric pad +)
-- To contract the focused window after expanding it:
Alt/KP_Subtract (numeric pad -)
-- If you want the same key to maximise/unmaximise set
CONFIG_SAME_KEY_MAX_UNMAX to True
-- To switch channels: Alt/cursor-Left and Alt/cursor-Right
-- To switch directly to channel number N, provided there is
a channel N (i.e. some client has been created there already):
Alt plus F-key N. Thus for channel 2 press Alt/F2 and so on.
-- To make the currently focused window "sticky", so it appears on
all channels: Alt/Pause. Repeat to unstick the window.
-- To pop up a keyboard-powered client menu: Alt/Menu; for a
keyboard-powered new-application menu: Alt/Multi_Key. (On my
PC, Menu is bound to the rightmost Windows-95-specific key and
Multi_Key to the one next to it.) You can then use cursor-Up
and cursor-Down, Return, and Escape to choose, select or cancel
from the menu.
Some of these bindings (notably the keyboard menu) can be switched off
altogether in Config.h.
Wheel mouse ===========
If you have a wheel mouse, you can use the wheel to switch channels.
Moving the wheel in the root window selects the next or previous channel;
moving it in the tab of a window moves that window up or down a channel.
Focus policy ============
Config.h contains settings for focus policy. There are three things you
can define to either True or False: CONFIG_CLICK_TO_FOCUS,
CONFIG_RAISE_ON_FOCUS and CONFIG_AUTO_RAISE. The first two are connected:
together they define a focus policy. The third is a separate focus policy
on its own and will only work if the first two are both False.
CONFIG_AUTO_RAISE differs from (!CONFIG_CLICK_TO_FOCUS &&
CONFIG_RAISE_ON_FOCUS) only in that it provides a short delay before
raising each window. The delay is also definable.
Skeletal feedback =================
If you have CONFIG_MAD_FEEDBACK set to True in Config.h, you will get some
natty feedback effects when using the left-button root menu (the Client
menu). Each window selected on the menu will be indicated with a half-
frame at the correct position on the screen, to make it easier to
distinguish between windows with similar names on the menu. If you have
CONFIG_FEEDBACK_DELAY set to zero or more, then the window itself will be
shown on the screen after a delay. You can use this to speculatively see
what a hidden window is showing, without having to restore it and hide it
again.
Dynamic configuration =====================
This release allows a certain degree of configuration at runtime.
(I know, I'm sorry.)
The configuration is held as the target of a symbolic link residing at
~/.wmx/options (or in whichever directory the CONFIG_COMMAND_MENU is
found). This target should be a string of the form a:b/c:d/e:f etc, to set
option a to value b, option c to value d, e to f and so on. The available
options are currently "menu" (full or part), "new" (on or off), "keyboard"
(on or off), "feedback" (on or off), and "focus" (click, raise, delay-raise
or follow). "focus:delay-raise" may be optionally followed by a comma and
then a delay time in ms.
For example,
amyl > ~ > ls -l ~/.wmx/options
lrwxrwxrwx 1 cannam cannam 39 Jan 12 10:16
/home/cannam/.wmx/options -> menu:full/new:off/focus:delay-raise,100
amyl > ~ >
The real problem with this scheme is that it makes Config.h harder to read,
because the defaults for the dynamically configurable options are now held
in Config.C instead.
Pixmaps =======
wmx allows you to specify a background pixmap for the window frames. If
you set CONFIG_USE_PIXMAPS to True in Config.h and supply a file will use
this to colour in the frames. If you also set CONFIG_USE_PIXMAP_MENUS, the
root menus will be filled in with the background too.
An especially unpleasant example file, cribbed and modified from
http://home.netscape.com/assist/net_sites/bg/marble/greenred_marble.gif, is
included, although you're advised to find your own.
Groups ======
This release also supports user-definable window groupings. To put a
window in a group, press Alt/Ctrl/{0-9} (for the group of that number). To
ungroup a window group, press Alt/Shift/{0-9}. Pressing Alt/{0-9} raises
all the windows in the numbered group. Like the "sticky" mode, there is no
visual feedback for window groups.
Decoration-free windows =======================
wmx does not support borderless or undecorated windows, but there is a
friendly utility by Vadim Kolontsov, called "xnodecor", that you can use to
circumvent this limitation if you want. See
http://sb.123.org/xnodecor.html
xnodecor gives you absolutely stationary, sticky, fixed borderless windows
for applications such as clocks that you feel you will never want to move
or remove.
xterm =====
Some versions of xterm and rxvt run badly with wmx. If you use xterm and
find that it refreshes the window excessively slowly, you might like to try
experimenting with a different terminal emulation program. I think it
might help to ensure that the scrollbar is on the right-hand side of the
rxvt window and is thick enough that wmx's resize handle doesn't obscure
any of the text area.
GNOME =====
Since the 6pre2 release, wmx has included some basic GNOME support due to
Henri Naccache. There are various other patches around that improve or
extend this GNOME support, including one from James Montgomerie. If you
want to run wmx with GNOME, start by taking a look at this message:
http://ml.42.org/wmx/msg00502.html
Credits =======
wmx was written by Chris Cannam, recycling a lot of code and structure from
"9wm" by David Hogan.
The sideways tabs on the window frames were Andy Green's idea.
Alan Richardson's "xvertext" font-rotation routines are used for the window
tabs.
Kazushi (Jam) Marukawa provided all the internationalisation code, which I
think is currently only tested for Japanese; see README.contrib for his
notes and copyright notice.
Jeremy Fitzhardinge provided the original application-menu code.
The dynamic configuration code is mostly due to Stefan `Sec' Zehl.
Multiheaded X support is due to Sven Oliver `SvOlli' Moll.
Gnome and shaped client support is mostly due to Henri Naccache.
This release contains code and bug fixes provided by Eric Marsden, Lasse
Rasinen, Bill Spitzak, Jacques Garrigue, Stefan `Sec' Zehl, Sven Oliver
Moll, Richard Sharman, Martin Andrews and, well, probably several other
people.
If you want to hack the code into something else for your own amusement,
please go ahead. Feel free to modify and redistribute, as long as you
retain the original copyrights as appropriate.
Mailing list ============
There is a mailing list for discussion of wm2 and wmx, hosted by majordomo
at 42.org. To subscribe, send email to majordomo@42.org with "subscribe
wmx" in the body of the mail. The list is archived on the web at
http://ml.42.org/wmx/.
Chris Cannam, cannam@all-day-breakfast.com April 2001