DragonFly On-Line Manual Pages
larswm(1x) larswm(1x)
NAME
larswm - Tiling Window Manager for X
SYNOPSIS
larswm [ -display dpy ] [ -f file ] [ -defaults ] [ -v ]
DESCRIPTION
larswm is a tiling window manager for X11, based on 9wm by David Hogan.
It provides virtual desktops, support for tiled and untiled windows,
keyboard shortcuts and more, while using very little system resources.
Please see http://larswm.fnurt.net for more information.
OPTIONS
The following command line options are supported:
-display dpy lets you specify which display you want larswm to
manage.
-f file lets you specify a preferences file other than
$HOME/.larswmrc to use for configuration.
-defaults prints to standard out a complete resource file for
larswm containing all options and their defaults.
-v prints the current version on standard error, then
exits.
FILES
$HOME/.larswmrc /etc/X11/larswmrc
these two files are looked for in the above order
when larswm starts up.
The Idea
When I started working on larswm I had a few ideas that I think are
important in a window manager. They are as follows:
1. The user should not have to spend alot of time arranging windows on
the screen, leaving more time for the actual work that he or she is
trying to accomplish.
2. Direct manipulation. Instead of accessing windows and desktops
through representations of these, access them directly. That means: No
icons when a window is iconified. No graphical map of the virtual
desktops, larswm is fast enough that it is easier to browse the actual
desktops instead, something that is very quick and easy to do,
especially if you have a wheel mouse, and since the windows are tiled,
you usually do not need much time looking at a desktop to know what is
on it. And within one desktop, tiling is a good example of direct
manipulation, a common way to deal with multiple windows on the screen
is to overlap them and select which one you want my clicking on a
representation in the form of a button on a task bar, however, larswm
does not need that because the actual window, with enough content
visible to know which one it is, is always visible.
3. No precision clicking. Use the edges of the monitor to make it easy
to aim with the mouse pointer.
4. It must be predictable. If the user ever wonders how focus ended up
on a window that he or she did not click on, something is wrong. larswm
has alot of code that deals with figuring out where focus should go
when different events occur.
5. It must have a solid feel to it. Part of this is speed, when you
switch desktops or windows are moved around as the result of being
tiled it must go quick, and part of it is predictability.
6. The window manager should not use more system resources (CPU time,
virtual memory) than is absolutely necessary for performing the task of
managing windows. The GUI is minimal, providing borders around the
windows, and a status bar at the bottom of the screen. It provides all
feedback using plain text on the status bar.
7. Quality control. It has been tested with Electric Fence to catch
memory access errors and profiled with gprof. So far I have been able
to fix everything that I found with these tools, but I am no CS major
and I am sure some things could be done better. Nevertheless, it
works, and during normal circumstances it works using minimal system
resources.
Terminology
Some of this is unique to larswm and some is borrowed from other GUI
designs.
Screen
Physical monitor. By default larswm will use up to 4 monitors. This can
be adjusted in the dat.h file.
Virtual Desktop
Each screen is logically divided into up to 16 workspaces. A window is
usually only visible on one of these workspaces.
Subdesktop
Each virtual desktop is then logically divided between two subdesktops.
First we have normal, untiled, windows. They are managed in a way
similar to most other window managers. Second we the tiled subdesktop,
where no window is allowed to overlap another. Switching between the
tiled and the untiled set of windows is very fast with a hotkey or
mouse click.
Track
On the tiled subdesktop, windows are laid out in one of two tracks. By
default, the ratio is 60%/40% for left/right track. The ratio can be
changed dynamically through hotkeys, and a different default can be set
in the .larswmrc file. The left track always contains one window
filling it from top to bottom while the right track contains any other
windows, evenly sized. There are hotkeys to make any window in the
right track expand and move to the left track while the window that was
in the left track is shrunk and placed at the top of the right track.
Status Bar
The status bar fills two functions. First off, as the name implies, it
shows status messages. This includes the window title of the focused
window, the selected virtual desktop, flags that shows what modes are
set on the current virtual desktop and a user defined message that is
used by the sample clock app to show the current date and time. Second,
it is a very big button that can be clicked to perform various
functions. It is easy to target, since you just move the mouse down
against the bottom of the screen, no need to precision aim for it.
Tool
A special kind of window that belongs to the untiled subdesktop, but is
still tiled around. It is also visible on all virtual desktops. Used
for things like clocks and load meters.
Select Zoom
Maximize a window so that the height/width ratio is the same as for a
US letter sized paper, and centering it on the screen. Besides wanting
to tile windows, this was the most common manual move/resize operation
I used before it was automated.
Put Aside
All this means is that a window is moved mostly off screen, leaving
just a portion visible. It is another way to do iconification.
A Sample Session
The following assumes you are using the sample.xsession and
sample.larswm config files. After logging in, you will see a mostly
empty desktop. Along the bottom of the screen is the status bar, and
in the lower right corner are three smaller windows (xload, xbiff and
xclock) which in the default config are tagged as tool windows. What
this means is they should be visible on all virtual desktops, and
should not be covered by windows that are placed automatically on the
tiled subdesktop.
Working with tiled windows
Now hit Shift-Control-Return. This will bring up a new terminal window.
Notice how it occupies the left 60% of the screen. Type something in
this window and hit Shift-Control-Return again. The first window is
moved to the right side and shrunk, while the new xterm occupies the
bigger area to the left. Notice that the toolwindows (xload, xbiff and
xclock) are not overlapped.
Hit Shift-Control-Return once more and notice how the two previous
windows now both are on the right side and using half the space each.
Now hit Control-Button1 on the first window you opened, it should be
the xterm right above the tool windows on the right side. This will put
that window in the left track, while putting the left track window at
the top of the right track.
That is all there is to never having to manually line up your xterms
again!
Working with untiled windows
For demonstration purposes, we can use xlogo. By default, the xlogo
window class is not set to be tiled, so it will be opened on the
untiled subdesktop, separate from all the xterms. In the focused xterm,
type xlogo and hit Return. The xlogo window should appear in the middle
of the screen above the tiled windows. If you need to switch between
tiled and untiled windows, you can use Shift-Control-BackSpace. Hit
that key twice and see how xlogo is first hidden behind the tiled
xterms and then brought to the front again. If you had more untiled
windows open, they would all have been lowered and raised together.
Moving windows to predefined areas
You can move untiled windows to 9 different predefined locations on the
screen with only one keystroke. With the xlogo window focused, hit
Shift-Control-KP_6. The xlogo window should be against the right edge
of the screen, halfway between the top and bottom, just like 6 on the
numeric keypad is among the keys 1 through 9. Hit Shift-Control and
each number on the numeric keypad to see the locations. When done,
leave the window on the right edge in the middle (Shift-Control-KP_6).
Select zooming
With the xlogo window focused and off to the side of the screen, hit
Shift-Control-space. Notice how it is centered and sized to make it
easy to work with. When you hit Shift-Control-space again, it is
returned to its former place and size. This can be used as an
alternative to tiling, if you have some windows you would like to
mostly manage yourself, but want a quick way to concentrate on one of
them.
Set aside windows
Sometimes when working on the untiled desktop you just want to set a
window aside for a moment. Hit Control-Alt-space to move a window
sideways off the right edge of the screen, leaving just a small portion
visible. Clicking on the visible part will put that window back where
it was. If you hit Control-Alt-space with no untiled window focused,
the last put aside window will be brought back. See the mouse reference
section for more ways to manipulate windows in this fashion.
Using the mouse to move and resize windows
With the xlogo window unzoomed and focused, move the mouse down onto
the status bar, anywhere will do, and hold down Shift-Alt-Button1. The
mousepointer moved to the top left corner of the window and you are
able to move the window around by moving the mouse. To place the
window, let go of the mouse button. Move xlogo to somewhere near the
top left of the screen.
Next, with the mouse on the status bar, hold down Shift-Control-Alt-
Button1. The mouse pointer is moved to the bottom right corner of the
xlogo window and when you move the mouse, you resize the window. To set
the size, let go of the mouse button.
Moving a window between subdesktops
Make sure the xlogo window is focused and then hit Shift+Alt+space. The
xlogo should now be tiled and focused in the left track. If you hit
Shift+Alt+space once more, it becomes untiled again and the other tiled
windows moves to fill the vacated spot in the left track.
Working with virtual desktops
So far, we have only used the first desktop. The way to switch between
desktops is easy. Shift-Control-Left and Shift-Control-Right on the
keyboard will move you back and forth between the desktops. Hit Shift-
Control-Right four times. Notice how the status bar label changes to
show what desktop is active. By default there are four virtual desktops
per screen, so you should be back to the first desktop now.
If you instead use Shift-Alt-Left or Shift-Alt-Right you will move to
the new virtual desktop while dragging the currently focused window
with you.
Using the mouse wheel
With larswm, the mouse wheel can be used for quite a few operations.
The most common is to switch virtual desktop. This can be done by
moving the pointer to the status bar and rolling the wheel up and down.
You can also use the mouse wheel to move and resize windows quickly.
With xlogo focused, move the pointer to the status bar and hold down
Shift-Alt while rolling the wheel to move the window sideways. If you
hold down Shift-Control-Alt you move the window up and down, and with
Shift-Control you can grow and shrink the window.
If you have more than one window open, hold down Shift while rolling
the wheel down to cycle focus through each window. To try it now, shift
to the tiled subdesktop by clicking on any of the tiled xterms then
move the mouse pointer to the status bar, hold down shift and roll the
wheel.
This is not exactly intuitive, but very fast once you learn the
combinations of Shift, Control and Alt keys to do these things.
Status Bar Menu System
The status bar is used for a simple menu system. With the pointer on
the status bar, hold down Control and click Button1 and Button3, or
roll the wheel up and down, to scroll between the menu entries.
Control-Button2 selects the current menu entry, usually toggling a
desktop or window setting.
If you instead of Control hold down Alt, you can scroll through the
list of iconified windows, and Alt-Button2 uniconifies the selected
window.
Things You Can Configure
You can affect alot (but not all!) of the behaviour of larswm by making
your own .larswmrc file and putting it in your home directory.
Default setup
Included in the distribution files is a file called sample.larswmrc
that you can use as a starting point for your own config.
Complete list of config keywords
Another way to get a default .larswmrc is to run larswm with the
-defaults flag. It will print out all the possible options with their
defaults filled in, all you have to do is uncomment and edit any lines
you wish to change. Rather than reproduce that here, you can create
your own up to date version by running the command larswm -defaults and
piping it to a file.
Keyboard commands for all windows and subdesktops
+--------------+-----------+----------------------------------+
|Shift-Control | Prior | Prev Screen |
+--------------+-----------+----------------------------------+
|Shift-Control | Next | Next Screen |
+--------------+-----------+----------------------------------+
|Shift-Control | Left | Prev Desktop |
+--------------+-----------+----------------------------------+
|Shift-Alt | Left | Prev Desktop Drag Focused Window |
+--------------+-----------+----------------------------------+
|Shift-Control | Right | Next Desktop |
+--------------+-----------+----------------------------------+
|Shift-Alt | Right | Next Desktop Drag Focused Window |
+--------------+-----------+----------------------------------+
|Shift-Control | F1-F12 | Jump to desktop 1-12 |
+--------------+-----------+----------------------------------+
|Shift-Control | BackSpace | Toggle Subdesktop |
+--------------+-----------+----------------------------------+
|Shift-Control | Up | Prev Window |
+--------------+-----------+----------------------------------+
|Shift-Control | Down | Next Window |
+--------------+-----------+----------------------------------+
|Control-Alt | z | Hide Window |
+--------------+-----------+----------------------------------+
|Control-Alt | x | Unhide last hidden window |
+--------------+-----------+----------------------------------+
|Control-Alt | w | Close Window |
+--------------+-----------+----------------------------------+
|Shift-Alt | space | Move window to other subdesktop |
+--------------+-----------+----------------------------------+
Keyboard commands for untiled windows
+------------------+-----------+------------------------------+
|Shift-Control | space | Select Zoom |
+------------------+-----------+------------------------------+
|Control-Alt | space | Put/restore aside window |
+------------------+-----------+------------------------------+
|Shift-Control | 0 | Put aside all other windows |
+------------------+-----------+------------------------------+
|Shift-Control | KP_Home | Move window to top left |
+------------------+-----------+------------------------------+
|Shift-Control | KP_Up | Move window to top center |
+------------------+-----------+------------------------------+
|Shift-Control | KP_Prior | Move window to top right |
+------------------+-----------+------------------------------+
|Shift-Control | KP_Left | Move window to left center |
+------------------+-----------+------------------------------+
|Shift-Control | KP_Begin | Center window |
+------------------+-----------+------------------------------+
|Shift-Control | KP_Right | Move window to right center |
+------------------+-----------+------------------------------+
|Shift-Control | KP_End | Move window to bottom left |
+------------------+-----------+------------------------------+
|Shift-Control | KP_Down | Move window to bottom center |
+------------------+-----------+------------------------------+
|Shift-Control | KP_Next | Move window to bottom right |
+------------------+-----------+------------------------------+
|Shift-Alt | KP_Up | Move window up |
+------------------+-----------+------------------------------+
|Shift-Alt | KP_Down | Move window down |
+------------------+-----------+------------------------------+
|Shift-Alt | KP_Left | Move window left |
+------------------+-----------+------------------------------+
|Shift-Alt | KP_Right | Move window right |
+------------------+-----------+------------------------------+
|Shift-Control-Alt | KP_Up | Grow window vertically |
+------------------+-----------+------------------------------+
|Shift-Control-Alt | KP_Down | Shrink window vertically |
+------------------+-----------+------------------------------+
|Shift-Control-Alt | KP_Left | Shrink window horizontally |
+------------------+-----------+------------------------------+
|Shift-Control-Alt | KP_Right | Grow window horizontally |
+------------------+-----------+------------------------------+
|Shift-Control-Alt | KP_Home | Grow window both ways |
+------------------+-----------+------------------------------+
|Shift-Control-Alt | KP_End | Shrink window both ways |
+------------------+-----------+------------------------------+
|Shift-Alt | KP_Insert | Toggle move/resize increment |
+------------------+-----------+------------------------------+
|Shift-Alt | KP_Home | Maximize window vertically |
+------------------+-----------+------------------------------+
|Shift-Alt | KP_End | Maximize window horizontally |
+------------------+-----------+------------------------------+
|Shift-Alt | KP_Begin | Maximize window |
+------------------+-----------+------------------------------+
|Shift-Control-Alt | KP_Begin | Full screen |
+------------------+-----------+------------------------------+
Keyboard commands for tiled windows
+------------------+----------+--------------------------------+
|Shift-Control-Alt | KP_Up | Maximize left track |
+------------------+----------+--------------------------------+
|Shift-Control-Alt | KP_Down | Restore left track |
+------------------+----------+--------------------------------+
|Shift-Control-Alt | KP_Left | Shrink left track |
+------------------+----------+--------------------------------+
|Shift-Control-Alt | KP_Right | Grow left track |
+------------------+----------+--------------------------------+
|Shift-Alt | KP_Begin | Move window to/from left track |
+------------------+----------+--------------------------------+
|Control-Alt | space | Restore aside window |
+------------------+----------+--------------------------------+
Mouse buttons on the status bar
+------------------+---------------+-------------------+-----------------+
| Modifier | Button1 | Button2 | Button3 |
+------------------+---------------+-------------------+-----------------+
|None | Prev Desktop | Subdesktop | Next Desktop |
+------------------+---------------+-------------------+-----------------+
|Control | Prev Menu | Select Menu | Next Menu |
+------------------+---------------+-------------------+-----------------+
|Alt | Prev Hidden | Hide/Unhide | Next Hidden |
+------------------+---------------+-------------------+-----------------+
|Shift-Control | Shrink | Select Zoom | Grow |
+------------------+---------------+-------------------+-----------------+
|Shift-Alt | Move Window | | |
+------------------+---------------+-------------------+-----------------+
|Shift-Control-Alt | Resize Window | Lower Window | Maximize Window |
+------------------+---------------+-------------------+-----------------+
|Control-Alt | Restore Aside | Put/Restore Aside | Put Aside |
+------------------+---------------+-------------------+-----------------+
Mouse wheel on the status bar
+------------------+---------------+--------------+
| Modifier | Roll Up | Roll Down |
+------------------+---------------+--------------+
|None | Prev Desktop | Next Desktop |
+------------------+---------------+--------------+
|Shift | Prev Window | Next Window |
+------------------+---------------+--------------+
|Control | Prev Menu | Next Menu |
+------------------+---------------+--------------+
|Alt | Prev Hidden | Next Hidden |
+------------------+---------------+--------------+
|Shift-Control | Shrink | Grow |
+------------------+---------------+--------------+
|Shift-Alt | Move Up | Move Down |
+------------------+---------------+--------------+
|Shift-Control-Alt | Move Left | Move Right |
+------------------+---------------+--------------+
|Control-Alt | Restore Aside | Put Aside |
+------------------+---------------+--------------+
Clicking on unfocused windows
Button1 is used to focus windows.
If skip_focus is on (this is the default) you can force a tiled window
into the left track by Control-Button1 clicking.
If skip_focus is off, then Control-Button1 clicking will prevent moving
the newly focused window to the left track.
If you Control-Button1 click on a window that is not on the active
subdesktop, you will switch focus without also switching subdesktop.
If you Control-Button1 click on an aside window, that window will be
put back while all other untiled windows are put aside.
Indexed resources
In the sample.larswmrc, all the entries that end in a number are
indexed resources. The number can be between 0 and 63, and must be
unique within each resource type.
Multi-head
When specifying an option that only affects one of the virtual
desktops, you can also limit it to a specific monitor. For instance,
larswm.0.0.dtname: One would name the first virtual desktop on the
first monitor only. Due to precedence, you can set an option for all
desktops one way, and then specific desktops another. The ways to
specify screens and desktops are, listed in order of precedence:
+--------------------+--------------------------------+
| Format | Affected desktops/screens |
+--------------------+--------------------------------+
|larswm.S.D.resource | Only desktop D on screen S |
+--------------------+--------------------------------+
|larswm.S.?.resource | All desktops on screen S |
+--------------------+--------------------------------+
|larswm.?.D.resource | Only desktop D on all screens. |
+--------------------+--------------------------------+
|larswm.?.?.resource | All desktops on all screens. |
+--------------------+--------------------------------+
|larswm*resource | All desktops on all screens. |
+--------------------+--------------------------------+
As an example, if you want all desktops except the first on the second
monitor to not resize windows that are tiled, you would put the
following lines in your .larswmrc:
larswm*tile_resize: false
larswm.1.0.tile_resize: true
The first line is needed because the default is to resize windows.
The Status Bar
The thin window across the bottom of the screen is the status bar. On
the left is the window title of the focused window, and on the right is
a status area.
Mode flags
Between the virtual desktop label and the user defined message
(date/time in the default setup) is a block of flags in upper case
[TCRSBH]. They indicate the following:
T Subdesktop
T for tiled or U for untiled.
C Clickthru
Whether clicks on an unfocused window should focus and pass the click
on to the client, or just focus and discard the click. C means pass to
client.
R Tile Resizing
Whether tiled windows are resized or not. R means they are resized. If
not, they are just stacked in the right track, each having the top left
corner visible.
S Skip Focus
Whether giving focus to a window in the right track makes it jump to
the left track. S means no, you have to Control-Button1 click it to
make it jump. If off, you can Control-Button1 click to make a window
stay in place while getting focus.
B Big Move/Resize
Whether the keyboard and mouse wheel commands to move and resize
windows should work a pixel at a time, or 5% of the screen width/height
at a time.
H Hidden Windows
Whether any windows are hidden (iconified) on any screens. It is there
so you will not forget about them, since larswm has no visual
representation of iconified windows.
Window mode flags
The status bar will also show the class of the focused window and
instance in the format (Class~Instance). Just to the right of that is
another set of flags in lower case [nftsz] that mean:
n Notile
Window belongs to the untiled subdesktop.
f Floating
Window always stays on top of non-floating windows.
t Tool
Window is tiled around, not over.
s Sticky
Window is visible on all virtual desktops.
z Zoomed
Window is in one of the zoomed states.
User defined message
If you want, you can put any message you like in the right most portion
of the status bar. This can be used for things like clocks, email
notifiers, stock tickers etc. Included in the distribution is a small
example of a clock called larsclock. It is started by the default
session script.
If you do not run larsclock, you can set the message from any shell
script with the command larsremote message TEXT, which would show TEXT
on the status bar.
Window Types
Here is a more detailed look at the different types larswm can
associate with a window.
Transient windows
Windows that have the WM_TRANSIENT_FOR property set are put on the
untiled subdesktop even if the window class has been specified as
tiled.
When a transient window first gets mapped, it will always show up, no
matter what desktop you are viewing. The transient window will be
assigned to the desktop where the parent window is though, so as soon
as you change desktop, it will only show up on the virtual desktop the
parent belongs to.
Untiled windows
Any window that is not tiled is assigned to the untiled subdesktop.
These windows are completely separate from the tiled subdesktop. The
untiled subdesktop behaves more or less like any traditional window
manager, but adds a few keyboard shortcuts for moving windows to
different parts of the screen or zooming them in both dimensions.
larswm will not tile a window unless its class/instance can be found in
the larswm.dotileclass list.
The way to move between your tiled and untiled desktop is through a
keyboard shortcut, which by default is Shift-Control-BackSpace
When a window is mapped on the untiled subdesktop for the first time,
it is centered on the screen, unless it has had its desired position
set in the hints.
Floating windows
Floating windows will always stay on top of other non-floating windows,
regardless of which subdesktop is active. This can be used for small
windows, like xcalc, that you always want accessible. If clickthru is
on, clicks will be passed on to floating windows regardless of which
subdesktop was active before the click.
Sticky windows
Sticky windows are windows of a class and instance that matches an
entry in the larswm.stickyclass list. They are always visible no matter
which virtual desktop you are on.
Tools
Tools are windows you always want visible. Examples of tools are
xclock, xload and other small informational windows. When a window has
been identified as a tool window, it will be assigned to the untiled
desktop, it will be sticky and the tiled windows will not cover it.
Also, if clickthru is on, any clicks on tool windows will be passed on
to the client, regardless of which subdesktop was active before the
click. Tools will never end up focused unless you click on them.
Internals
A little more detail about how larswm does things.
Every time a window is mapped or unmapped, or (if skip_focus is off)
you focus a new window on the tiled subdesktop by clicking on it the
following process is executed:
1. The width of the two tracks are calculated. This is by default set
up so the left track uses 60% of the screen width, but it can be
configured in the
2. It calculates how many windows should be in each track, one in the
left track and the rest in the right.
3. The height of each window in each track is calculated.
4. It goes through the list of all windows and places them in the
designated spot.
5. After this it returns to the event loop.
That is pretty much it. If skip_focus is off (default is on), when you
click on an inactive window in the right track, it will pop over into
the left track, and the window that were there will pop over to the top
of the right track.
At all times, the right track will contain tiled windows in the order
that they were in the left track, starting with most recent.
Associating windows with a virtual desktop
You can associate certain window classes/instances to a certain virtual
desktop number by adding resources to your .larswmrc.
An example of how to associate all Netscape windows with the second
virtual desktop:
larswm.dtclass.0: Netscape
larswm.dtnum.0: 1
When any Netscape window opens, larswm will first switch to the
specified desktop, then map the window.
Hidden windows
larswm iconifies windows by hiding them. To unhide a hidden window, you
must first locate its label using the status bar. Please see the
section about using menus on the status bar for information on how this
works.
You can also unhide the last hidden window with one keystroke, Control-
Alt-x.
Focus handling
To change focus to a window, you just left click on it, and if
skip_focus is off that window will pop into the left track, and the
window currently there will pop over to the top of the right track.
If you have it set up to automatically put the focused window in the
left track, you might still sometimes want to type something into one
of the tiled windows without rearranging all the windows, and to do
that you Control-Button1 click on a window. Focus will change, but all
windows will stay where they are. This will also prevent any transient
windows owned by the application from immediately be raised and get
focus.
If you have it in the default mode, where selecting a new window to
have focus does not make it pop into the left track you can do that by
Control-Button1 clicking it.
Clickthru
When you click on a window to give it focus, that click is also passed
on to the client. This makes it easier to work with a multi-window
application. You can turn this feature off, in which case the click
used to focus a window is never seen by the application.
Multi-Head
When a window gets mapped, for whatever reason, it is usually given
focus. But if the MapRequest event occurs on a different screen than
the one you are working on, things could get confusing. I solved this
by adding the following rules to how focus is assigned when windows
open and close:
1. If the currently focused window is on the same screen, then the new
window will get focus.
2. If the currently focused window is on a different screen, the new
window will get focus only if the mouse pointer is on the same screen
as the new window.
3. If no window is focused, a newly mapped window will get focus only
if the mouse pointer is on the same screen as the new window.
4. If the focused window closes, focus will revert to another window,
usually the window that was focused before the one that just closed.
Focus will revert only if the mouse pointer is on the same screen as
the window that closed.
I believe these rules will help eliminate most cases of having your
keystrokes go to a window you did not intend it to.
Atoms
The following atoms are created and monitored by larswm and can be used
in third party tools:
LARSWM_EXIT
Tells larswm to exit.
LARSWM_RESTART
Tells larswm to restart, reloading the .larswmrc file.
LARSWM_BARTEXT
When this is updated, the content of this atom is shown as text on the
status bar until the atom is updated again. See larsclock and
larsremote for examples of how to use this.
Compatibility
Terminal Windows
xterm windows might look like they are not redrawing correctly, but
they are in fact. It is up to the program running inside it to detect
window size changes and redraw the screen as necessary. One way to deal
with this is to run screen inside the xterm, as it will handle resizing
and redrawing correctly.
On some, mostly older, systems you need to make terminal windows know
that they have been resized when they are first opened and tiled.
Put this line in your .cshrc or .bashrc:
eval `resize`
It will ensure that it is set to the correct number of rows and columns
when it is opened.
Size Hints
The PResizeInc and PMaxSize hints are honored. PMinSize is not, as it
might have problems fitting all the windows in when tiling them.
Resizing Windows
For windows that do not cope well with being resized, you can disable
automatic resizing on a particular desktop, making the windows in the
right track be stacked on top of eachother instead. This can also be
used for windows that resize slowly, like Netscape, to speed things up
considerably.
Multi-Head Displays
It does work well with multi-head displays. One of my development
systems is a dual-head Sun running Solaris 9, so this functionality has
been tested quite alot. It currently behaves in a predictable manner
when you switch focus between screens, move between desktops etc.
GTK Applications
Some GTK apps do not set WM_TRANSIENT_FOR correctly on their dialog
boxes, and they also sometimes have a different class string on those
subwindows, making things confused. The best way to deal with those
kinds of problems is to specify both the class and instance of the top
level windows you do want tiled. In some cases, this still does not
work, like in some builds of Mozilla where every window it creates has
class/instance Mozilla-bin/mozilla-bin.
Standards Compliance
At this time there is no GNOME/KDE/Motif/whatever compatibility. It
follows the ICCCM as much as it can while still providing all the
automatic functionality that it does.
LICENSE
Many thanks to David Hogan for writing 9wm and releasing it under such
a license that I could use it as a base to build larswm on.
Here is the original license for 9wm:
---
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.
---
Please consider my code to be under the same type of license as 9wm,
inserting my name where appropriate.
SEE ALSO
larsclock(1x), larsmenu(1x), larsremote(1x)
AUTHORS
larswm was created by Lars Bernhardsson <lab@fnurt.net> by building on
9wm by David Hogan.
larswm(1x)