Here is a set of goals for this window manager:
- Common Lisp;
- Just the features I want;
- Simple and easy to maintain code;
- No more than 500 SLOC;
- No configuration outside the main program. Don’t do anything fancy (text, icon, cursor or color) to avoid the temptation;
- No EWMH as implementing this shit would bloat the code for little (if any) improvements.
- Install SBCL or CLISP on your system (should be available via your system’s packages);
- Install quicklisp;
- Tweak line 4 of wm.lisp to point to your quicklisp directory.
sbcl --script [your path to]/wm.lisp to your .xinitrc or
xhost local:local and
clisp [your path to]/wm.lisp to
your .xinitrc or .xsession.
Control-t is the prefix key. Every shortcut starts with it.
C-nis next managed window;
C-pis previous managed window;
C-tis last used window;
C-tto current window;
cruns a xterm;
eruns or raise an emacs;
wruns or raise a web browser (configurable in wm.lisp);
C-llocks the screen with xlock;
ais the app launcher: keys hit after will look for the correct app;
- =’= is the class finder: works like the app launcher but fetch the first window of the given class;
ftoggles the current window to fullscreen (and revert size/position when changing focus);
.centers the current window;
mtoggles mosaic mode of windows.
Alt) is the prefix for the mouse.
- left button moves the window;
- right button resize the window;
- C-middle button close the window.
With SBCL, one of the first thing that wm.lisp does is to create a swank server on port 4005. You can then connect Emacs/SLIME to it (M-x slime-connect) and hack the window manager live.