Регистрация | Войти
Lisp — программируемый язык программирования

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.).

@2009-2013 lisper.ru