A Window Manager Toolkit for Guile Scheme
Switch branches/tags
Clone or download
mwitmer Fix race condition when initializing Tiling WM
Only start listening for changes to randr displays
after the tiling wm is all set up.
Latest commit f3c7b3b May 28, 2017



                              Mark Witmer

Table of Contents

1 Overview
2 Why?
3 What's Actually Implemented
4 What's Not Implemented
.. 4.1 Wish List
.. 4.2 Even Crazier Wish List
5 Sample
6 Installation and Prerequisites

1 Overview

  Guile-WM is a framework for creating an X window manager (or any other
  X application, really) and a set of useful modules designed for that
  purpose. Users are encouraged to pick and choose from ones presently
  available and contribute their own as well!

  Guile-WM relies /heavily/ on its user init file. In fact, it won't do
  anything on its own without one. The intention is to provide something
  100% configurable.

2 Why?

  Guile Scheme is just so much fun to work with, I wanted to build my
  house out of it. (Also, StumpWM won't work in my Linux distribution
  right now. And I find LOOP macros unsettling for some reason.)

  I didn't want to build a WM on top of xlib. It's obsolete, or should
  be, anyway. XCB is great, and when I saw that it comes with XML files
  that describe the X protocol so that you can easily implement an X
  client in a different language, I decided to build the whole X client
  stack in Scheme. Why not? So I made Guile XCB. And then, finally, I
  got to work on this.

3 What's Actually Implemented

  • keymaps/minibuffer/user-defined commands: The usual emacs-style
  • A tiling window manager inspired by Stumpwm, as well as a drag/drop
    window manager inspired by tinywm
  • Built-in repl: make changes to the WM while it's running, talk to
    the X server directly (if you're into that kind of thing), integrate
    with Geiser in Emacs, etc. (Note: if you call a procedure that talks
    to the X server, use the metacommand ,post to evalute the
    expression.  That way it'll run inside the event loop on the other
  • Some icccm support
  • And more! It's completely open, so you could implement whatever
    window-management paradigm you like.

4 What's Not Implemented

  There's a lot more I'd like to do, but as you can see, it gets
  progressively more grandiose and, um… crazy, perhaps.

4.1 Wish List

  • Some kind of window decoration
  • Built-in replacements for those little X utility programs (xmodmap,
    xsetbg, etc.) I did part of xrandr as a proof-of-concept.
  • A status bar/modeline type thing
  • Antialiased fonts! guile-pango would be good for this.
  • Whatever else you want… ideas (and implementations) welcome.

4.2 Even Crazier Wish List

  • Implement enough of a widget toolkit to actually run Guile Emacs
    inside of Guile-WM all on Guile XCB. You would basically be running
    a Lisp-machine at that point and all of your friends will be
  • Add support for XInput2 to Guile XCB w/touch gestures and whatnot
    and build a hackable mobile device interface. Isn't it a tragedy
    that smartphones are becoming the most common type of computer, but
    you can't really hack on them? Real XCB does support XInput2 now, so
    I'm running out of excuses…
  • Build a WM on top of Wayland. That would require a Scheme Wayland
    client, which could be built along the lines of Guile XCB, since the
    Wayland projects comes with the same kind of XML spec files that XCB

5 Sample

  An annotated sample init file is included with the distribution as
  "wm-init-sample.scm". It demonstrates how to set up the configurable
  values in the available modules. Copy it to ~/.guile-wm to try it out.

6 Installation and Prerequisites

  You can use the typical ./configure, make, make install chain to build

  Guile-WM requires Guile XCB and the latest release of Guile (2.0.9).