wingedmonkey, the window manager

wingedmonkey is a nonreparenting lightweight window manager with some code borrowed from dwm. It is neither purely tiling or stacking window manager, but provides the user with a possibility to choose and mix his own layout style. However, wingedmonkey is NOT a dynamic window manager. The layout is fixed until you change it. wingedmonkey can be controlled via commandline using the client wingedchimp.

Questions you'd never ask by yourself:

Why wingedmonkey?
Well, wm must stand for something more fun than just window manager.
Why not just use one of the thousand existing window managers?
Nothing that you don't make yourself will ever fit you exactly right and also cannot give you the satisfaction of making something that works.
What do you mean NOT a dynamic window manager?
Ever been annoyed when you left something somewhere and when you came back it wasn't there because someone else thought of a "better" place to put it? It's the same with application windows. No matter what happens, windows should never move around without you knowing. You are the master of your workspace and if you put something somewhere, you surely had a good reason to do so.
What does it do that's different from other wm's?
Its framework is designed to be general enough to support different layout paradigms. See man page for more answers.
How does it work?
It defines the layout as a collection of layers. Layers are composed of tiles and tiles are virtual rectangles that contain windows. All these things are highly configurable to produce a desired effect.
Where are all the panels, pagers, menus, wallpaper and launchers?
They were already made by other people. You can use any panel or pager you want (or all of them at once). There is also no root menu because window manager should manage windows, not make them. As for the custom keybindings, use xbindkeys with wingedmonkey's commandline API wingedchimp. The same goes for desktop background (feh, xv, xsetroot,...).
How do I minimize a window?
You don't. The layout model allows toggling the visibility of window groups and if you use it right, there will never be a situation when you need to minimize a window.
Does wingedmonkey respect the EWMH standard?
Mostly. Due to the layout model that does not fit perfectly into the concept of desktops and icons, there are some unrespected signals and made-up information.

Layout basics

The layout is composed of layers, tiles and clients. Layers contain tiles and tiles contain clients. Layers and tiles are identified with user-defined names.

Clients

Clients are the representation of X windows. Main properties of clients are its geometry, stack-level and float-state. Clients belong to tiles. Client can either be in fulscreen state -- occupy entire screen, maximized -- occupy entire tile, or floating -- have arbitrary geometry, as long as it remains within the tile.

Tiles

Tiles are virtual (invisible and unclickable) areas on the screen where the clients can be. Clients belonging to a tile are unable to stick out. You can think of a tile as a virtual screen. There can be any number of tiles in a layer. They can assume any geometry; they can overlap or extend beyond the bounds of the screen. Tiles can force the clients to be maximized.

Layers

A layer is an abstract group of windows that are visible at the same time. Many layers can be visible at the same time. The number of layers is arbitrary, but there is always read-only zeroth layer that is there to ensure space if every other tile rejects the window. Layers can be configured to stay on top of other layers or hide when they lose focus.

Desktops

As you could guess, layers are not exactly desktops. Desktops are just rules to toggle the visibility of layers. For each layer, desktops specify if it is forced visible ("X"), forced hidden ("0") or left for the user to toggle ("+", "*"). Any number of desktops can be defined and any combination of above flags is allowed. This means one desktop can force all the layers to be hidden, one force all to be visible, one make two layers visible, 4 hidden and 2 togglable, and so on...

Rules

You can define rules that match the title and other text properties of windows and assign them to a particular tile.

Window assignment

When a new window is formed, its place is sought in the following places:

Beginner's tips

Zero-configuration state is almost as useless as Windows(TM). You need to choose what you want and configure accordingly.

First you design the layout. If you are a visual person, use a pen to sketch desired arrangement of tiles. If you are using panels, don't forget to allocate the tile and a rule to put it there. The package ships with a few example scripts (on most distros: /usr/share/wingedmonkey/). Copy one to ~/.wingedmonkeyrc and start tweaking. To simplify the layout design, there is a graphical interface wingedpython (requires wxpython to work) that allows you to arrange the layout with your rat. Beware, it edits only the layout part of your configuration file. It's best to keep the layout in a separate file and include it in ~/.wingedmonkeyrc where you can then put everything else.

You will probably need additional keybindings. Read the man page of wingedchimp and bind the appropriate commands with xbindkeys (or other similar software). Example .xbindkeysrc:

"wingedchimp exec firefox"
m:0x8 + c:69
Alt + F3

"wingedchimp exec urxvt"
m:0x8 + c:67
Alt + F1

"wingedchimp layer-set 5 visible toggle"
m:0x4 + c:49
Control + backslash

"wingedchimp layer-set 6 visible toggle"
m:0x8 + c:49
Alt + backslash

You can also completely turn off the default keybindings and remap everything by yourself.

And finally, choose your applications and decide where they should be. wingedmonkey is all about order. Choose your panel, allocate popup layers, and fine-tune the layout parameters. If you need wallpaper, call feh/xv/xsetroot or whatever.

Remember, you may start all the applications from .xinitrc, but you don't have to. wingedmonkey has exec command, so all the applications, including wallpaper setter and xbindkeys can go in the configuration file.

The additional files provided in /usr/share/wingedmonkey/ include an example .xbindkeysrc, .xinitrc, a few layout examples and a helper script that shows how to use the wingedchimp interface to add functionality to your window manager.

Warnings

Download

wingedmonkey-0.2.4 source tarball
Project page

Development

concept, programming and quirks: Simon Čopar

Send comments, feature requests and bug reports to info.ised(at)gmail.com.