Fensterchef-wm is a fast and flexible tiling window manager. It is the original and most complex product hence we refer to it as just "fensterchef".

Fensterchef currently only has an X11 backend but plans are there to port it to Wayland compatible with previous configuration.

This document is a guide to the fensterchef window manager.

Content

Installation

Depends on: X11, Xrandr≥1.2, Xcursor and Xft

Build from source

Building requires: coreutils, gzip, pkgconf, a C99 compiler and a unix shell

git clone https://github.com/fensterchef/fensterchef.git &&
cd fensterchef &&
sudo ./make install &&
fensterchef --version

Using an AUR helper

pacaur -S fensterchef

Setting up

For most display managers like LigthDM, GDM, SLiM etc., it suffices to edit ~/.xsession:

exec /usr/bin/fensterchef

When using no display manager, use your preferred way.

Getting started

You get a default configuration baked into the executable. But we also supply one in text which is at /usr/share/fensterchef/wm. Copy it to ~/.config/fensterchef/wm.

Within the configuration, look for the default modifier which is defined as Mod4 by alias mod = Mod4. It is the prefix of most button and key bindings you can use in fensterchef.

To see what key Mod4 corresponds to, use xmodmap -pm. It usually is Super_L.
From now on, we will refer to your default modifier as mod.

Set the terminal emulator

To use your preferred terminal, make an environment variable called TERMINAL and set it to the executable of your terminal emulator.
Configure this in your shell. Usually, editing ~/.profile suffices.

Alternatively, make a bind in the fensterchef configuration. Look for the line in the supplied configuration that says "terminal". The bind could look like:

# Start a terminal
mod+Return run xterm

Start an X session

Start an X session with fensterchef. Fensterchef 2.0 supplies you with notifications and the window list. Nothing more.

Open a terminal

Try your configured binding to open a terminal which is mod+Return by default. Open a second one and notice how it covers the previous terminal. Fensterchef will never split unless told to split. However, you can edit the configuration and enable auto split. Then, whenever a window is shown, it is split off the current window.
To close the terminal windows again, use mod+q. To simply hide them to later retrieve them, use mod+minus.

No need to restart fensterchef. Edit the configuration file and hit the reload configuration binding mod+Shift+r to reload at runtime.

Make windows float

Open a terminal and press mod+Shift+space to make a window float. It will be above the tiling windows on a separate layer.
The floating window mode can be toggled by pressing the binding again.

You may notice that an empty area is left behind when making a window float. To automatically remove such areas, turn on auto remove void or the more aggressive auto remove. It can also happen that a new window is filled into the now empty spot, this is controlled using auto fill void.

You can directly split a frame using mod+v for a left and right split or mod+s for a top and bottom split. To focus the split frames, use the home row keys hjkl or arrow keys together with mod. To remove the splits agains, use mod+r.

You can also swap frames around using mod+Shift together with a directional key. There is another way. Instead of swapping frames, fensterchef can move them around. You can configure this behaviour like this:

# Move frames around
mod+Shift+h move left
mod+Shift+j move down
mod+Shift+k move up
mod+Shift+l move right
mod+Shift+Left move left
mod+Shift+Down move down
mod+Shift+Up move up
mod+Shift+Right move right

Frame vs Window

Frames refer to the partitioning of your screen into rectangular areas. As you noticed, these areas may or may not contain a window. A window internally is a wrapper around an X window. The clients you start like an e-mail program or browser may spawn such windows. Windows can also be dialogs.

Frames are rigid areas meant for consistent window positioning.
Windows are spawned by your applications.

Frame and Window numbers

Both frames and windows have a number. The numbers of frames are unique whereas multiple windows can share the same number. You can freely assign a number to a frame or window using assign FRAME_NUMBER or assign window WINDOW_NUMBER.

Open a terminal and make it float. Press mod+Shift+1 to give it number 101. Hide it using mod+minus. Now you can open it again using mod+1.

A lot more is possible using relations. See fensterchef(5) for more information.

Window layers

There are three layers that hold onto different window modes. The desktop layer is at the bottom and holds onto desktop windows. The tiling layer holds onto tiling windows. At the top is the floating window holding onto the rest: Floating, dock and fullscreen windows. When you have a tiling window and a floating window, you can switch between them using mod+space.

Window modes

You now already know two window modes: Tiling and floating. The other window modes are: Fullscreen, dock and desktop. When a window is mapped (about to be shown on screen), fensterchef decides based on the window's internal properties what mode it should be in initially. When you start a video game, it usually starts as fullscreen. Dialog windows usually start as floating windows. Other windows like bars are dock windows and then there are the desktop windows in the back of everything. The rest gets assigned the tiling window mode.

You can already make a tiling window a floating window and vise versa. Now try to make it fullscreen using mod+f. You will notice the window covers the entire screen. Use mod+f again to put it back in its original state.

While focusing a floating or fullscreen window, all bindings for frames still work the same way. You are able to control what you can not see.

Window list

Use mod+w to open the window list. You are presented with a window showing all currently managed windows. This excludes windows that do not want to receive focus. You can see the window mode indicated by a letter if the window is visible. If the window is focused, it is indicated by a *. If the window is hidden, you see a -.

Use the home row keys hjkl or the arrow keys to navigate the list. When over a window, use Return to show and focus selected window. To simply hide the window again without focusing another window, use q or Escape.

While the window list is open, you can still use all bindings with mod. See how the window list does live updates.

Frame stash

If you remove frames using mod+r they are not actually removed but put into the frame stash. You can pop frames from this stash using mod+o. This swaps out the current frame with the stashed frame. Empty frames will never be stashed.

Similar to stash options is mod+n/p. These two bindings replace the current frame similar to mod+o. But they do not place the last popped frame into the current frame. Instead, they place the window with higher/lower id into the current frame. Imagine you have two windows, a terminal and a browser window. The terminal has id 88 and the browser has id 92. When the browser is invisible, the terminal is a focused tiling window, then mod+n will select the browser window. Then pressing mod+p will invert this.

Parent and child frames

When you split a frame, you get 3 frames in total. One is the parent frame and the other two the left and right child frames. You can switch between the children but it is also possible to select the parent using mod+a. When a parent is selected, you can use mod+b to go back to the child frame. A parent frame is like any other frame and can be moved, stashed or resized.

Multiple screens

We will refer to a physical output device as monitor. Fensterchef recognizes your monitor setup using Xrandr. You are required to configure your monitors through Xrandr. Fensterchef will recognize any changes you do at runtime. There is one configuration option you could bind to move windows to specific monitors:

# Move the current window to a monitor called HDMI-A-0
mod+Shift+a center window to HDMI-A-0
# Or one called DVI-D-2
mod+Shift+z center window to DVI-D-2

Going further

Now you should have an understanding on what fensterchef is capable of. You can also look at the two manual pages supplied with the installation.

A short recap can be found at fensterchef(1).

All configuration options are described in fensterchef(5).

Any questions go to discussions.

Glossary

Jump to the most informative mentioning of a term.