StumpWM. My new favorite window manager.
Go to file
2019-01-03 22:24:50 -05:00
tests Convert some pathname functions to use uiop 2019-01-03 22:24:50 -05:00
.dir-locals.el Allow insertion of TAB character when editing Makefiles 2013-11-19 00:30:27 -02:00
.gitattributes add .gitattributes 2007-09-15 16:03:40 -07:00
.gitignore Ignore texi auxiliary files 2017-06-01 07:57:31 -05:00
.travis.yml Update Travis-CI notifications 2018-07-22 18:12:42 -05:00
AUTHORS Update focus when clicking a TILE-WINDOW behind a FLOAT-WINDOW 2018-12-31 10:31:30 -05:00
autogen.sh add autogen.sh. remove stumpwm.sbcl and stumpwm.clisp 2007-10-06 18:32:47 -07:00
bindings.lisp Add new command place-current-window 2018-08-07 16:26:23 +02:00
color.lisp Fixing color parsing issues, fixes #391 2018-02-14 22:36:28 -05:00
command.lisp Document *MAX-COMMAND-ALIAS-DEPTH* 2018-01-27 15:37:10 -05:00
configure.ac Purging multiple lisp boiler plate 2017-08-25 19:17:24 -04:00
COPYING Update FSF address 2011-11-13 12:31:20 +00:00
core.lisp Extends send-fake-key to send key-press and key-release events 2018-06-12 17:49:51 -07:00
dynamic-window.lisp Fix style-warning. 2018-09-26 18:00:36 +02:00
events.lisp Fix float window map request crash in tile group 2018-12-31 10:36:02 -05:00
fdump.lisp Add new command place-current-window 2018-08-07 16:26:23 +02:00
floating-group.lisp Refactor the logic behind *FLOAT-WINDOW-MODIFIER* 2018-12-15 11:22:01 -05:00
font-rendering.lisp Add multiple font support 2014-07-24 21:05:25 +02:00
group.lisp GROUP.lisp: Miscellaneous Refactor 2018-11-15 00:39:48 -05:00
HACKING touch up b53c01d617 to make the manual build again. 2008-05-09 15:49:50 -07:00
head.lisp Find current head from pointer in floating group 2017-06-12 19:53:41 +02:00
help.lisp Remove unused export 2018-01-23 08:39:13 -05:00
input.lisp READ-ONE-LINE: Turn COMPLETIONS into a keyword argument 2018-12-16 18:46:15 -05:00
interactive-keymap.lisp DEFINE-INTERACTIVE-KEYPMAP: Quote the Key bindings 2018-10-12 00:22:59 -05:00
ioloop.lisp Remove conditionals for non sbcl common lisp implementations (#351) 2017-05-24 23:03:58 -05:00
iresize.lisp Solve error when calling resize-direction directly as command and add docstring to it (#442) 2018-02-09 00:49:47 -05:00
keysyms.lisp Include keysym for XF86AudioMicMute. 2014-04-27 20:30:01 -04:00
keytrans.lisp Update FSF address 2011-11-13 12:31:20 +00:00
kmap.lisp Fix PARSE-KEY to error with KBD-PARSE-ERROR 2018-08-31 20:55:09 -05:00
load-stumpwm.lisp.in Remove conditionals for non sbcl common lisp implementations (#351) 2017-05-24 23:03:58 -05:00
make-image.lisp.in Only set SBCL_HOME if it was set at build time 2017-05-25 21:13:40 +02:00
Makefile.in Restoring sbcl make rules and removing old release and upload-release targets 2017-09-01 13:16:53 -04:00
manual.lisp Adding all missing symbols to manual 2018-09-02 15:55:05 -04:00
menu-declarations.lisp Fix spelling in menu-prompt-line 2018-06-23 13:13:37 -06:00
menu-definitions.lisp Fixed compilation errors 2018-06-22 20:12:22 -06:00
message-window.lisp New message window gravity setting 2018-10-20 10:52:57 +01:00
mode-line-formatters.lisp Split formatters into mode-line-formatters.lisp 2016-10-31 00:57:45 +01:00
mode-line.lisp Declare mode-line and timer before using them. 2018-09-28 09:58:48 +02:00
module.lisp Fix checking if a directory contains a .asd file when loading modules 2018-05-25 13:48:12 +10:00
NEWS NEWS: remove merge cruft 2018-10-07 12:16:13 -05:00
package.lisp Added functions IN-MAIN-THREAD-P and PUSH-EVENT 2017-07-18 01:49:04 -05:00
pathnames.lisp Convert some pathname functions to use uiop 2019-01-03 22:24:50 -05:00
primitives.lisp Merge pull request #518 from drdo/message-window-input-gravity 2018-11-20 17:03:16 -05:00
README.md Updated readme to add manual documentation requirement 2018-09-02 16:36:37 -04:00
remap-keys.lisp Grabs keyboard ahead of reading a single key 2018-11-25 10:41:47 -08:00
sample-stumpwmrc.lisp Fixes #207 2015-07-14 09:34:00 -04:00
screen.lisp Replaced all tab characters with an appropriate number of spaces. 2017-12-20 14:32:38 -06:00
selection.lisp Fix for incorrect selection targets property value 2017-07-22 12:45:09 -07:00
stumpwm-tests.asd Convert some pathname functions to use uiop 2019-01-03 22:24:50 -05:00
stumpwm.asd Add tests for PARSE-KEY 2018-07-28 11:46:01 -05:00
stumpwm.lisp Added thread for rehashing users $PATH 2018-08-25 14:56:25 -04:00
stumpwm.texi.in Remove READ-LINE-FROM-SYSFS from stumpwm.texi.in 2018-12-19 08:38:57 -05:00
test-wm.lisp add 2 more tests to test-wm-class 2008-10-17 15:16:13 -07:00
tile-group.lisp Refactor FIND-FRAME 2018-10-08 13:45:38 -05:00
tile-window.lisp Fix bug introduced in 12c9202 2019-01-01 12:55:59 -05:00
time.lisp Add REFRESH-TIME-ZONE 2018-07-25 01:02:23 +00:00
timers.lisp Declare mode-line and timer before using them. 2018-09-28 09:58:48 +02:00
user.lisp Added thread for rehashing users $PATH 2018-08-25 14:56:25 -04:00
version.lisp Added Daniel Borchmann's patch to honor version number from tags 2014-02-24 08:25:38 -05:00
window-placement.lisp Add new command place-current-window 2018-08-07 16:26:23 +02:00
window.lisp Merge branch 'master' into fix-remap-keys-local-grab 2018-11-25 10:47:39 -08:00
wrappers.lisp Replaced all tab characters with an appropriate number of spaces. 2017-12-20 14:32:38 -06:00
wse.lisp Replaced all tab characters with an appropriate number of spaces. 2017-12-20 14:32:38 -06:00

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
    • Written in Common Lisp
    • A multi paradigm window manager
    • 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

  • sbcl
  • quicklisp (for obtaining the following dependencies, not needed if you use your distribution's package manager.)
  • clx
  • cl-ppcre
  • alexandria

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 https://beta.quicklisp.org/quicklisp.lisp
$ sbcl --load quicklisp.lisp

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 "cl-ppcre")
 (ql:quickload "alexandria")

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

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.

Contributing

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

  • Do's
    • Add your name to the list of AUTHORS with your pull request.
    • 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
    • If you export a symbol, you must add it to the manual.
    • 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 then 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.

Wishlist

Fancy yourself a lisp hacker? Here's a wishlist of features for the StumpWM universe (in no particular order):

  • float-splits (ie allow floating windows over tiled ones)
  • Float windows within parent applications (specifically dialogs in gimp or firefox).
  • tab-list showing the contents of the current frame at the side, top, or bottom of the frame
  • Emacs' iswitchb function implemented in emacs
    • Re-arranging windows between groups
    • Killing windows
    • Marking windows for batch operations
    • Deleting/adding groups
    • Import data from stumpwm to emacs, use an emacs minor mode to implement the above features, then export the data back to stumpwm and let stumpwm perform the appropriate actions
  • Emacs' completing-read-multiple function
  • Dynamic tiling
  • Lock Screen (with support for leaving notes, bonus points if emacs is involved)
  • Wallpapers! (support pulling from remote sources, changing based on timers, and other hacky features)
  • Shutdown, restart, suspend, and hibernate functions that don't require root access
  • Revamped, mouse-friendly mode-line.
    • Support fixed number of chars for window titles
    • Dynamically trim window titles to fit them all on the mode-line
    • Split the mode-line into multiple cells for containing different information
    • Implement widget icons to indicate system status (new mail, low battery, network etc)
    • Support raising windows when left-clicked, closing/killing when right-clicked

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 latest git version (may be 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.