Установка
Зависимости:
- реализация Common Lisp (поддерживаются clisp и SBCL)
- clx
- cl-ppcre
- autoconf
- texinfo
$ 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 можно уже в процессе работы. Для этого можно:
- внести изменения в ~/.stumpwmrc и выполнить команду С-t ; loadrc
- использовать emacs и stumpwm-mode.el
- использовать stumpish (STUMPwm Interactive SHell)
- использовать 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