I want to talk about stumpwm, a window manager written in Common
LISP. I think one must at least like emacs to like stumpwm. Stumpwm is
a tiling window manager one which you create “panes” on the screen
like windows on Emacs. A single pane takes 100% of the screen, then
you can split it into 2 panes vertically or horizontally and resize
it, and you can split again and again. There is no “automatic”
tiling. By default, if you have ONE pane, you will only have ONE
window displayed, this is a bit different that others tiling wm I had
tried. Also, virtual desktops are named groups, nothing special here,
you can create/delete groups and rename it. Finally, stumpwm is not
minimalistic.
To install it, you need to get the sources of stumpwm, install a
common lisp interpreter (sbcl, clisp, ecl etc…), install quicklisp
(which is not in packages), install the quicklisp packages cl-ppcre
and clx and then you can compile stumpwm, that will produce a huge
binary which embedded a common lisp interpreter (that’s a way to share
common lisp executables, the interpreter can create an executable from
itself and include the files you want to execute). I would like to
make a package for OpenBSD but packaging quicklisp and its packages
seems too difficult for me at the moment.
Here is my config file in ~/.stumpwmrc.
Updated: 23th january 2018
(defun chomp(text) (subseq text 0 (- (length text) 1)))
(defmacro cmd(command) `(progn `(:eval (chomp (stumpwm:run-shell-command ,,command t)))))
(defun get-latence()
(let ((now (get-universal-time)))
(when (> (- now *latence-last-update* ) 30)
(setf *latence-last-update* now)
(when (probe-file "/tmp/latenceresult")
(with-open-file (x "/tmp/latenceresult"
:direction :input)
(setf *latence* (read-line x))))))
*latence*)
(defvar *latence-last-update* (get-universal-time))
(defvar *latence* "nil")
(set-module-dir "~/dev/stumpwm-contrib/")
(stumpwm:run-shell-command "setxkbmap fr")
(stumpwm:run-shell-command "feh --bg-fill red_damask-wallpaper-1920x1080.jpg")
(defvar color1 "#886666")
(defvar color2 "#222222")
(setf
stumpwm:*mode-line-background-color* color2
stumpwm:*mode-line-foreground-color* color1
stumpwm:*mode-line-border-color* "#555555"
stumpwm:*screen-mode-line-format* (list "%g | %v ^>^7 %B | " '(:eval (get-latence)) "ms %d ")
stumpwm:*mode-line-border-width* 1
stumpwm:*mode-line-pad-x* 6
stumpwm:*mode-line-pad-y* 1
stumpwm:*mode-line-timeout* 5
stumpwm:*mouse-focus-policy* :click
;;stumpwm:*group-format* "%n·%t
stumpwm:*group-format* "%n"
stumpwm:*time-modeline-string* "%H:%M"
stumpwm:*window-format* "^b^(:fg \"#7799AA\")<%25t>"
stumpwm:*window-border-style* :tight
stumpwm:*normal-border-width* 1
)
(stumpwm:set-focus-color "#7799CC")
(stumpwm:grename "Alpha")
(stumpwm:gnewbg "Beta")
(stumpwm:gnewbg "Tau")
(stumpwm:gnewbg "Pi")
(stumpwm:gnewbg "Zeta")
(stumpwm:gnewbg "Teta")
(stumpwm:gnewbg "Phi")
(stumpwm:gnewbg "Rho")
(stumpwm:toggle-mode-line (stumpwm:current-screen) (stumpwm:current-head))
(set-prefix-key (kbd "M-a"))
(define-key *root-map* (kbd "c") "exec urxvtc")
(define-key *root-map* (kbd "RET") "move-window down")
(define-key *root-map* (kbd "z") "fullscreen")
(define-key *top-map* (kbd "M-&") "gselect 1")
(define-key *top-map* (kbd "M-eacute") "gselect 2")
(define-key *top-map* (kbd "M-\"") "gselect 3")
(define-key *top-map* (kbd "M-quoteright") "gselect 4")
(define-key *top-map* (kbd "M-(") "gselect 5")
(define-key *top-map* (kbd "M--") "gselect 6")
(define-key *top-map* (kbd "M-egrave") "gselect 7")
(define-key *top-map* (kbd "M-underscore") "gselect 8")
(define-key *top-map* (kbd "s-l") "exec slock")
(define-key *top-map* (kbd "s-t") "exec urxvtc")
(define-key *top-map* (kbd "M-S-RET") "exec urxvtc")
(define-key *top-map* (kbd "M-C") "exec urxvtc")
(define-key *top-map* (kbd "s-s") "exec /home/solene/dev/screen_up.sh")
(define-key *top-map* (kbd "s-Left") "gprev")
(define-key *top-map* (kbd "s-Right") "gnext")
(define-key *top-map* (kbd "M-ISO_Left_Tab")"other")
(define-key *top-map* (kbd "M-TAB") "fnext")
(define-key *top-map* (kbd "M-twosuperior") "next-in-frame")
(load-module "battery-portable")
(load-module "stumptray")
I use a function to get latency from a script that is started every 20
seconds to display the network latency or nil if I don’t have internet
access.
I use rxvt-unicode daemon (urxvtd) as a terminal emulator, so the
terminal command is urxvtc (for client), it’s lighter and faster to
load.
I also use a weird “alt+tab” combination:
- Alt+tab switch between panes
- Alt+² (the key above tab) circles windows in the current pane
- Alt+Shift+Tab switch to the previous windows selected
StumpWM website