15 мая 2009 г.

StumpWM

Установил и начал настраивать под себя StumpWM - фреймовый оконный менеджер, написанный на Common Lisp. Чтобы ознакомиться с некоторыми его возможностями, можно посмотреть видео ролик.

Установка


Зависимости:
  1. реализация Common Lisp (поддерживаются clisp и SBCL)
  2. clx
  3. cl-ppcre
  4. autoconf
  5. texinfo
Я использовал SBCL 1.0.19, пакеты clx и cl-ppcre установливал с помощью clbuild:

$ darcs get http://common-lisp.net/project/clbuild/clbuild
$ cd clbuild
clbuild$ chmod +x clbuild
clbuild$ ./clbuild install clx cl-ppcre

Чтобы asdf видел пакеты, установленные с помощью, clbuild добавим следующую строку в ~/.sbclrc:

(push #p"/path/to/clbuild/systems/" asdf:*central-registry*)

Устанавливаем последнюю версию StumpWM из репозитория:

$ git clone git://git.savannah.nongnu.org/stumpwm.git
$ cd stumpwm
stumpwm$ autoconf
stumpwm$ ./configure && make

В текущей директории появился файл stumpwm, который нужно указать в ~/.xinitrc:

$ echo "exec /path/to/stumpwm" > ~/.xinitrc
$ startx

Настройка

При запуске StumpWM использует файл ~/.stumpwmrc. Например, поместив следущие инструкции в ~/.stumpwmrc мы определим функцию, которая вызывается при нажатии C-t f. Она запускает Firefox, если он ещё не был запущен, в противном случае - переходит к ранее запущенному.
(defcommand firefox () ()
"Start/Switchto Firefox."
(run-or-raise "firefox" '(:class "Firefox")))

(define-key *root-map* (kbd "f") "firefox")

В качестве примера можно использовать файл sample-stumpwmrc.lisp, можно посмотреть на файлы .stumpwmrc других пользователей, также много инересного можно узнать из stumpwm.info.

Полностью поменять поведение StumpWM можно уже в процессе работы. Для этого можно:
  1. внести изменения в ~/.stumpwmrc и выполнить команду С-t ; loadrc
  2. использовать emacs и stumpwm-mode.el
  3. использовать stumpish (STUMPwm Interactive SHell)
  4. использовать SLIME

Использование SLIME для настройки StumpWM

Установим SLIME и создадим сивольную ссылку на stumpwm.asd для clbuild:

$ cd /path/to/clbuild
clbuild$ ./clbuild install slime
clbuild$ ln -s /path/to/stumpwm.asd systems/stumpwm.asd

Для запуска SLIME необходимо добавить в .emacs следующие строки, полученные при выполнении команды $ ./clbuild slime-configuration:

(setq load-path (cons "/path/to/clbuild/source/slime" load-path))
(setq load-path (cons "/path/to/clbuild/source/slime/contrib" load-path))
(setq slime-backend "/path/to/clbuild/.swank-loader.lisp")
(setq inhibit-splash-screen t)
(load "/path/to/clbuild/source/slime/slime")
(setq inferior-lisp-program"/path/to/clbuild/clbuild --implementation sbcl lisp")
(setq slime-use-autodoc-mode nil)
(slime-setup '(slime-fancy slime-tramp slime-asdf))
(slime-require :swank-listener-hooks)

Создадим файл startstump для запуска StumpWM и swank:

;; -*-lisp-*-
(require :stumpwm)
(require :swank)
(swank-loader::setup)
(swank:create-server :dont-close t)
(stumpwm:stumpwm)

Таким образом теперь для запуска не используетсся собранный с помощью make файл stumpwm, что исключает необходимость повторных сборок при обновлении stumpwm.

Изменим ~/.xinitrc:

exec /path/to/clbuild/clbuild lisp --load /path/to/startstump

clbuild запускает реализацию Common Lisp и загружает созданный нами файл.

Выполнив startx и открыв emacs, можно выполнить команду M-x slime-connect и использовать REPL для внесения измененний. Например, следующие команды сделают стандартную mode-line более информативной:
; SLIME 2009-05-16
CL-USER> (in-package :stumpwm)
STUMPWM> (load-module "battery-portable")
T
STUMPWM> (load-module "cpu")
T
STUMPWM> (load-module "mem")
T
STUMPWM> (load-module "net")
T
STUMPWM> (setf stumpwm:*screen-mode-line-format*
(list "%n | "
'(:eval (run-shell-command "date +'%a %d %b %H:%M:%S' | tr -d [:cntrl:]" t))
" | %l| %c| %M| %B | %W"))
("%n | "
(:EVAL (RUN-SHELL-COMMAND "date +'%a %d %b %H:%M:%S' | tr -d [:cntrl:]" T))
" | %l| %c| %M| %B | %W")
STUMPWM> (mode-line)
NIL