Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Window manager in the Racket programming language
branch: master
Failed to load latest commit information.
policy fix focus: revert the focus to the last raised window, not the last i…
private use the new layout dictionary to show all existing layouts
themes/Simple Now with frames (not activated by default)
user-files small focus fix
.gitignore many things...
LICENSE first commit Move all configuration to configure.rkt
base.rkt Installation in the session manager
client.rkt current-policy is now a fun-box instead of a parameter.
client2.rkt remove trailing spaces
color.rkt remove trailing spaces
configure.rkt Refactor: Use rect, size, and pos structs instead of values for windo…
display.rkt remove (the unused) 'display-size' to avoid moving the 'size' struct …
doc-string.rkt text and comments
events.rkt fix focus: revert the focus to the last raised window, not the last i…
gpl-3.0.txt many things...
info.rkt Move all configuration to configure.rkt
keymap.rkt Refactor: Use rect, size, and pos structs instead of values for windo…
main.rkt remove all gui occurrences (to hard to make the x11/racket-gui cooper…
rwind.rkt minor things
server-sync.rkt Use sane restart, without needing to restart the Racket process.
server.rkt current-policy is now a fun-box instead of a parameter.
user.rkt reformatting
util.rkt Add border-color to policy inits. Rename selected-window-width to sel…
window.rkt small focus fix
workspace.rkt fix focus: revert the focus to the last raised window, not the last i…

RWind - The Racket Window Manager

An extensible window manager aiming to be similar to Sawfish, but written in the Racket programming language.

There is an RWind mailing list.

First some warnings:

  • This package is under current development and is in no way stable, and is intended for testing purposes only.
  • Backward compatibility will not be ensured in the 0.x branch.
  • Due to a security issue, the current version should not be used on multiple user computers. Use at your own risk.

Current features

  • Stacking and tiling support
  • Client command line (repl)
  • Customization of key bindings and mouse bindings
  • Workspaces with two modes:
    • single mode: one workspace over all monitors
    • multi mode: one workspace per monitor
  • Xinerama and RandR support
  • Currently little ICCCM/EWMH compliance

All these features are in development stage.

Installation & quick start

1) Install Racket

Currently, you will need the latest version of Racket.

2) Install RWind


raco pkg install rwind

(raco is provided with Racket, so it should be in your path)

It will ask you if you want to install x11. You should say yes as RWind cannot work without this library.

3) Configure RWind


racket -l rwind/configure

And follow the instructions. This creates a default RWind configuration file, then it asks you to choose between a session manager or a xinit/startx configuration. If you choose a session manager configuration, it will abort and you will need to re-type the above command preceded by sudo. These two steps are required because the first configuration files must be owned by the user.

You can reconfigure RWind at any time.

4) Start RWind

a) If you chose a session configuration, go back to the login screen. You should now see RWind in the login options.

b) If you chose a xinit/startx configuration, in a virtual terminal (Ctrl-Alt-F1), type the following:

xinit .xinitrc-rwind -- :1 &

You may need to modify the display :1 to :2 for example if :1 is not available. The default .xinitrc-rwind is a simple example file that you may want to edit to fit your needs. By default, you need to close the xterms to exit the session.

Default configuration and customization

Upon configuration, the file config.rkt was created. This is where all the RWind customization is done. By default, you can open this file within RWind by pressing Alt-F11 (this can also be changed in the configuration file). Take a look at this file to know what keybindings are defined. You can also of course add you own keybindings.

The default window policy is stacking (as for most traditional window managers), but you can easily change it to tiling in the configuration file. With the tiling policy, several layouts are possible (mainly uniform and dwindle). To choose a layout, specify so in the file:

(current-policy (new policy-tiling% [layout 'dwindle]))

If you edit the configuration file, you will need to restart RWind to take the changes into account, probably by pressing the keybinding as defined in this very file. You don't need to recompile RWind, just restart it.

The client

The client is a console where you can evaluate Racket expressions and communicate with the window manager. It can be opened in a terminal with:

racket -l rwind/client

For example, place the mouse pointer on a window and type in the console:

> (window-name (pointer-window))


> (move-window (pointer-window) 10 40)

The list of available symbols provided by RWind is given by:

> (known-identifiers)

All bindings of #lang racket are available too.

You can get help on a known identifier with:

> (describe 'focus-window)

You can search among the list of identifiers with:

> (search-identifiers "window")

You can get the list of existing layouts for the tyling policy:

> (policy. get-layouts)

The layout can be changed immediately:

> (policy. set-layout 'dwindle)

Updating RWind

RWind has some dependencies, in particular the X11 FFI bindings, that will probably need to be updated with RWind. To do this automatically, specify the --auto option to raco update:

raco update --auto rwind

Your RWind configurations file will not be modified by the update. This also means that any new feature that may appear in the new versions of these files will not be added to your files. You can reconfigure RWind, and you will be asked if you want to replace the existing config.rkt file.

Something went wrong with that request. Please try again.