Skip to content
This repository

The Stump Window Manager

branch: master
Octocat-spinner-32 .dir-locals.el Allow insertion of TAB character when editing Makefiles November 19, 2013
Octocat-spinner-32 .gitattributes add .gitattributes September 15, 2007
Octocat-spinner-32 .gitignore Merge pull request #8 from filonenko-mikhail/event-hook January 27, 2014
Octocat-spinner-32 AUTHORS Update email address. November 13, 2011
Octocat-spinner-32 COPYING Update FSF address November 13, 2011
Octocat-spinner-32 HACKING touch up b53c01d to make the manual build again. May 09, 2008
Octocat-spinner-32 Makefile.in Consolidate all LispWorks specific loading code in load-stumpwm.lisp.in. February 05, 2014
Octocat-spinner-32 NEWS update NEWS file May 18, 2010
Octocat-spinner-32 README.md add missing dependency to README March 18, 2014
Octocat-spinner-32 autogen.sh add autogen.sh. remove stumpwm.sbcl and stumpwm.clisp October 06, 2007
Octocat-spinner-32 bindings.lisp Added exchange-window-map and bound to 'C-t x' by default March 09, 2014
Octocat-spinner-32 color.lisp Merge branch 'tt-fonts' March 14, 2014
Octocat-spinner-32 command.lisp Merge pull request #84 from girzel/docs March 24, 2014
Octocat-spinner-32 configure.ac Fixed 'STUMPWM' not foun when trying to build November 19, 2013
Octocat-spinner-32 core.lisp Add configuring of the grabbed pointer December 08, 2013
Octocat-spinner-32 events.lisp Removing spurious debugging message March 14, 2014
Octocat-spinner-32 fdump.lisp Update FSF address November 13, 2011
Octocat-spinner-32 floating-group.lisp warp pointer in right corner when resizing in float group November 29, 2011
Octocat-spinner-32 font-rendering.lisp Merging in anti-aliased font code March 14, 2014
Octocat-spinner-32 group.lisp Export one more function March 18, 2014
Octocat-spinner-32 head.lisp Adding head patch to stop crash when head isn't empty February 27, 2014
Octocat-spinner-32 help.lisp Update FSF address November 13, 2011
Octocat-spinner-32 input.lisp Merge pull request #84 from girzel/docs March 24, 2014
Octocat-spinner-32 iresize.lisp Update FSF address November 13, 2011
Octocat-spinner-32 keysyms.lisp Added key mappings for monitor and keyboard brightness buttons. June 22, 2013
Octocat-spinner-32 keytrans.lisp Update FSF address November 13, 2011
Octocat-spinner-32 kmap.lisp Update FSF address November 13, 2011
Octocat-spinner-32 load-stumpwm.lisp.in Removed embedded emacs variables February 16, 2014
Octocat-spinner-32 make-image.lisp.in Removed embedded emacs variables February 16, 2014
Octocat-spinner-32 manual.lisp Removed embedded emacs variables February 16, 2014
Octocat-spinner-32 menu.lisp Add select-from-menu to export list February 07, 2014
Octocat-spinner-32 message-window.lisp fix gcontext creating with font August 30, 2012
Octocat-spinner-32 mode-line.lisp Merge branch 'tt-fonts' March 14, 2014
Octocat-spinner-32 module.lisp Merge branch 'db/cleanup-module.lisp' of https://github.com/exot/stumpwm March 16, 2014
Octocat-spinner-32 package.lisp Update FSF address November 13, 2011
Octocat-spinner-32 pathnames.lisp Added parts of CL-FAD to resolve portability issues with DIRECTORY. December 26, 2009
Octocat-spinner-32 primitives.lisp Merge branch 'tt-fonts' March 14, 2014
Octocat-spinner-32 sample-stumpwmrc.lisp Change completing-read and read-one-line to use &key arguments May 12, 2010
Octocat-spinner-32 screen.lisp Add a bit more export March 25, 2014
Octocat-spinner-32 selection.lisp Update FSF address November 13, 2011
Octocat-spinner-32 stumpwm.asd removing truetype dependency April 06, 2014
Octocat-spinner-32 stumpwm.lisp Supporting hooks for stumptray February 26, 2014
Octocat-spinner-32 stumpwm.texi.in Merge pull request #84 from girzel/docs March 24, 2014
Octocat-spinner-32 test-wm.lisp add 2 more tests to test-wm-class October 17, 2008
Octocat-spinner-32 tile-group.lisp Update FSF address November 13, 2011
Octocat-spinner-32 tile-window.lisp Added exchange-window-map and bound to 'C-t x' by default March 09, 2014
Octocat-spinner-32 time.lisp Update FSF address November 13, 2011
Octocat-spinner-32 user.lisp Remove duplicate call to frame-raise-window from run-or-raise. March 02, 2014
Octocat-spinner-32 version.lisp Added Daniel Borchmann's patch to honor version number from tags February 24, 2014
Octocat-spinner-32 window-placement.lisp Only sync window frames when the frame exists. February 03, 2014
Octocat-spinner-32 window.lisp Window attributes are often needed by modules; changing the set of wi… March 18, 2014
Octocat-spinner-32 workarounds.lisp Comment typo. March 16, 2010
Octocat-spinner-32 wrappers.lisp Initial port to LispWorks 6.x. October 16, 2012
Octocat-spinner-32 wse.lisp Adding a missing function from module and exporting some functionalit… March 18, 2014
README.md

The Stump Window Manager

Stumpwm is a window manager written entirely in Common Lisp. It attempts to be highly customizable while relying entirely on the keyboard for input. You will not find buttons, icons, title bars, tool bars, or any of the other conventional GUI widgets.

These design decisions reflect the growing popularity of productive, customizable lisp based systems.

Philosophy

Stumpwm is a "everything-and-the-kitchen-sink WM" or "the emacs of WMs."

StumpWM:Windows::Emacs:Text

  • StumpWM is
    • Hackable
    • A tileable window manager
    • Includes support for floats
    • Written in Common Lisp
    • Compatible with many lisp distributions
    • A Superior window managing experience
  • StumpWM is not
    • Minimalist
    • Narrow Scope
    • Configured by editing the source directly
    • A full blown desktop environment

If you want a minimalist tiling window manager, then StumpWM is not what you're looking for. The code base is ~15k sloc, the binaries produced are ~60mb.

StumpWM manages windows the way emacs manages buffers, or the way screen manages terminals. If you want a flexible, customizable, hackable desktop experience, look no further.

Build & Start Stumpwm

Prerequisites

  • a common lisp distribution. sbcl, clisp, ccl and ecl all work (ecl must have been built with clx support, must use version >= 13.5.1 see here for discussion).
  • quicklisp (for obtaining the following dependencies, not needed if you use your distribution's package manager.)
  • clx
  • cl-ppcre
  • cl-xembed

The recommended way to install the dependencies is using Quicklisp. Follow the instructions at http://www.quicklisp.org/ to install it. In short:

$ curl -O http://beta.quicklisp.org/quicklisp.lisp
$ sbcl --load quicklisp.lisp

Or insert your favorite lisp distribution (clisp, ccl or ecl). Then at the REPL:

(quicklisp-quickstart:install)

Make sure you have added it to your lisp init file using:

 (ql:add-to-init-file)

Then, in a repl:

 (ql:quickload "clx")
 (ql:quickload "clx-truetype")
 (ql:quickload "cl-ppcre")

Building

Building stumpwm from git requires that you build the configure script:

 autoconf

If there's already a configure script then just run it.

 ./configure

By default stumpwm elects sbcl. If you have multiple lisps installed, you can explicitly select clisp, ccl, or ecl like so:

 ./configure --with-lisp=clisp

If your lisps are in strange places you may need to tell the script where to find them:

 ./configure --with-sbcl=/home/sabetts/opt/bin/sbcl
 ./configure --with-clisp=/usr/local/downstairs/to/the/left/clisp

Now build it:

 make

If all goes well, you should have a stumpwm binary now. You can run the binary from where it is or install it, along with the .info documentation, with:

 make install

Now that you have a binary, call it from your ~/.xinitrc file:

 echo /path/to/stumpwm >> ~/.xinitrc
 startx

Hopefully that will put you in X running stumpwm! See StartUp on the wiki for more examples.

Requirements for multiple monitor setups

For stumpwm to work as intended with multiple monitors setups the xdpyinfo utility is needed.

Contributing

Pull requests are always welcome! Here are some guidelines to ensure that your contribution gets merged in a timely manner:

  • Do's
    • Preserve comments or docstrings explaining what code does, and update them if your patch changes them in a significant way
    • Try to follow an "80 column rule." The current code base does not follow this all the time, so don't use it as an example
    • Use lisp idioms
    • If you are working on a major change to the internals, keep us informed on stumpwm-devel! Also, it will probably help if the changes are made and the incrementally applied to the codebase in order to avoid introducing show-stopping bugs.
  • Do not's
    • Include emacs local variables
    • Change whitespace
    • Write lots of code without supporting comments/documentation
    • Delete comments or docstrings (yes this is a duplicate of above!)
    • Export symbols from packages that aren't widely useful (many times a little more thought will reveal how to implement your internal change without having to export/break encapsulation)
    • Make stylistic changes that suit your coding style/way of thinking

Our wiki has fallen into disarray/disrepair, but it is shaping up. If you aren't a lisp hacker, you can contribute in the form of documenting and organizing the wiki. There's a lot of information floating around, if you find it where you didn't expect it, move or link to it in a more logical place.

CCL And Virtual Memory

On 64bit platforms, CCL reserves a "very large" amount of virtual memory. If this bothers you for some reason, you can pass the -R or --heap-reserve option to the binary in your ~/.xinitrc file. See http://ccl.clozure.com/manual/chapter15.1.html for an explanation.

Help

There's a texinfo manual, stumpwm.texi. The build scripts generate an info file you can read in emacs or with the `info' program. The manual for the 0.9.7 (slightly out of date) is available to read online at: The Manual

And, as in emacs, you can always do "C-t h v,f,k,c,w" for docstrings of Variable,Functions,Keys,Commands, and Where-is respectively.

For other stuff (tips tricks and examples) visit the stumpwm wiki

There's a #stumpwm channel on irc.freenode.net, too.

Finally, there's our mailing list (click to sign up) stumpwm-devel@nongnu.org.

Something went wrong with that request. Please try again.