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
Questions you'd never ask by yourself:
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
Where are all the panels, pagers, menus, wallpaper and
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
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.
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 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 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.
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.
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...
You can define rules that match the title and other text properties of
windows and assign them to a particular tile.
When a new window is formed, its place is sought in the following places:
- tiles assigned by matching rules.
- sticky nonfull tiles in visible layers.
- normal empty tiles in visible layers.
- nonavoiding nonfull tiles in visible layers.
- nonavoiding nonfull tiles in all layers.
- zeroth layer.
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
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
- All the features except those I'm using regularly are completely untested.
- There is currently no builtin way to split or merge tiles.
wingedmonkey-0.2.4 source tarball
concept, programming and quirks:
Send comments, feature requests and bug reports to info.ised(at)gmail.com.