---
name: "larswm"
section: "1x"
platform: "linux"
package: "larswm"
version: "7.5.3-6"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/larswm"
---

# larswm(1x)

Tiling Window Manager for X

## 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 .larswmrc file.

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)](/larsclock/1x.md), [larsmenu(1x)](/larsmenu/1x.md), [larsremote(1x)](/larsremote/1x.md)

## AUTHORS

larswm was created by Lars Bernhardsson \<lab@fnurt.net\> by building on 9wm by David Hogan.
