Project url:
https://github.com/BurntSushi/wingo
It's go gettable:
go get
github.com/BurntSushi/wingo
And an optional command line client to run commands:
go get
github.com/BurntSushi/wingo/wingo-cmd
Wingo is intended to be a fully featured window manager. This
includes, but is not limited to: theming, hooks, IPC, per-monitor
workspaces (i.e., sensible multi head support), EWMH/ICCCM compliance
for the most part, key/mouse bindings, and automatic tiling when you
want it. To get the full scoop, see the README at the project URL.
Screenshots:
https://github.com/BurntSushi/wingo/wiki/Screenshots
Since this is the Go mailing list, I'll talk a little bit about my
experience using Go to write a window manager.
Firstly, I've been trying to build a window manager in one form or
another for a few years now. I put a lot of work into trying to build
one in Python [1], but I quickly found the project to be unworkable as
the code base grew in size. (It will probably be the last time I
attempt a project of that size without static typing.) I desperately
did not want to write one in C. So in that sense, Go really fit the
bill well here. (And this isn't hard to imagine, given the popular
characterization of Go as "somewhere between C and Python".)
Secondly, Go's build system forced me into *not* being lazy and
building an infrastructure with recursive module imports. It sounds so
simple, but in a project of this size, it really came in handy.
Particularly since I ended up resolving such design problems with
interfaces, which I am *very* pleased with. (See focus, frame, heads,
layout, stack and workspace sub-packages.)
Thirdly, while Wingo itself does not do anything too fancy in the
concurrency area, Go made it dead simple to add the IPC feature where
Wingo commands can be executed over a socket. I think it took me less
than an hour to go from no IPC to a functioning client/server.
Fourthly, every Wingo command is defined via reflection on a struct.
(That is, the command name, its parameter list and types, and its
documentation.) This makes adding new commands an absolute pleasure.
The magic to do this is in a separate package called Gribble [2] that
has no ties to X or window managers.
Comments and criticisms are welcome. (I still have much to do, but
Wingo is in good enough shape for me to be using it on a day-to-day
basis.)
[1] -
https://github.com/BurntSushi/pyndow
[2] -
https://github.com/BurntSushi/gribble
- Andrew