StumpWM
Есть нечто что делает Emacs особенным текстовым редактором,
так вот - это же нечто делает StumpWM особенным оконным менеджером.
Bill Clementson, примерный перевод, отсюда.
StumpWM это тайловый оконный менеджер, который отличается следующими особенностями:
- Это оконный менеджер полностью написанный на Common Lisp. При его запуске (startx) создаётся полноценный lisp-runtime с доступом к REPL и с возможностью обновить как конфигурацию менеджера так и сам его код в "горячем" режиме.
- Это именно *просто* оконный менеджер, а не рабочее окружение (подобно XFCE, Gnome или KDE). Следовательно, он может использоваться как основа объединяющая разрозненные программы (emacs, например, консоль, и т.п.), а также может работать в качестве менеджера окон какого-либо рабочего окружения, например, Gnome.
- Это keyboard-driven менеджер окон, т.е. предполагается, что большинство операций с окнами проделываются при помощи клавиатурных комбинаций.
- Это тайловый оконный менеджер, как было сказано, - он берет на себя заботу о том как именно будут располагаться окна (если не задать явно другого поведения).
О том почему и как он возник можно прочитать на Википедии, узнать подробнее о возможностях - в документации, также есть небольшое видео.
Установка
Естественней всего использовать StumpWM в связке с SBCL. StumpWM присутствует в репозиториях большинства дистрибутивов, поэтому может быть установлен достаточно просто. Но тут будет рассмотрен ручной способ установки - последней версии из git. Итак, вот небольшой файл, который будет делать всю необходимую работу:
;;;
;;; Little `script' for install StumpWM in SBCL environment:
;;;
;;; sbcl --load stumpwm-install.lisp
;;;
(in-package #:cl-user)
;;; Emb. shell
;;;
(set-dispatch-macro-character
#\#
#\s
#'(lambda (stream sub-char numarg)
(declare (ignore sub-char numarg))
(let (chars)
(do ((prev (read-char stream) curr)
(curr (read-char stream) (read-char stream)))
((and (char= prev #\#) (char= curr #\#)))
(push prev chars))
(let ((asdf::*verbose-out* *standard-output*))
(asdf:run-shell-command
(coerce (nreverse chars) 'string))))))
;;; Little shell script there
;;;
#s
DIR=`pwd`
if [ -d "stumpwm" ] ; then
cd stumpwm
git pull -f
cd ${DIR}
else
git clone git://git.savannah.nongnu.org/stumpwm.git
fi
if [ -f "stumpwm/module.lisp.in" ] ; then
mv stumpwm/module.lisp.in stumpwm/module.lisp
fi
if [ -f "stumpwm/version.lisp.in" ] ; then
mv stumpwm/version.lisp.in stumpwm/version.lisp
fi
##
;;; Make executable stumpwm image
;;;
(load "stumpwm/stumpwm.asd")
(asdf:oos 'asdf:load-op :stumpwm)
(sb-ext:save-lisp-and-die "stumpwm.bin"
:executable t
:toplevel #'(lambda () (stumpwm:stumpwm ":0")))
Тут показан простой способ встроить shell сценарии в лисп-код с помощью макросов чтения, к примеру:
CL-USER> #s pwd ##
; $ pwd
/home/treep/devel/lisp
0
После запуска
sbcl --load stumpwm-install.lisp
будет создан git-репозиторий, исходный код будет скомпилирован и сохранён в образ.
При повторном запуске
sbcl --load stumpwm-install.lisp
git-репозиторий будет по необходимости обновлён (pull), а образ - пересобран снова.
После этого нужно положить образ stumpwm.bin в удобное место.
Один StumpWM
Пишем в файл ~/.xinitrc строчку
exec /path/to/stumpwm
Теперь (если вы можете это сделать :) если нет - нужно перезагрузится, или остановить gdm (gdm stop)) :
killall X
startx
И мы оказываемся в "голом" StumpWM.
StumpWM и Gnome
Чтобы использовать StumpWM как независимый менеджер окон в среде Gnome нужно совершить следующие действия:
- Убедится, что вход в систему осуществляется через GDM и его меню выбора сессий (механизм xsessions). В gentoo нужно поступить согласно http://www.gentoo.org/doc/ru/gnome-config.xml
- На всякий случай:
gconftool-2 -u /desktop/gnome/session/required_components/windowmanager
- sudo mkdir /etc/X11/sessions
- Записать в файл /etc/X11/sessions/Xsessions.desktop следующее:
[Desktop Entry]
Name=Xsession
Comment=This runs ~/.xsession
Exec=/etc/X11/Xsession
- В файле ~/.xsession написать
export WINDOW_MANAGER="/path/to/stumpwm"
exec gnome-session
Вот и всё, однако это хоть и StumpWM в Gnome окружении - это не типичный Gnome - так шрифты будут выставлены по-умолчанию (скверно :), а гномовские панели будут отсутствовать. Панели можно запустить с помощью
gnome-panel &
(но и тут может потребоваться напильник :)
О чём не было сказано
~/.stumpwmrc - конфигурационный файл (на Common Lisp), позволяющий настроить любое необходимое поведение.
Шрифты - изначально они выглядят (мягко говоря) не очень хорошо, поэтому требуют отдельной настройки.
Использование в качестве естественного WM среды Gnome (XFCE, KDE, etc.).