Я пользовался wmii с лета 2006 года. С тех пор в отношении оконного менеджера у меня ничего не менялось.
Шли годы, я рос и постигал дзен. Используемых программ становилось всё меньше, а я всё дальше погружался в круглоскобие.
Я стал использовать в основном только Firefox для просмотра сайтов и GNU Emacs для всего прочего.
Нельзя сказать, что wmii не мог справиться с обслуживанием столь скудного рабочего процесса. Тем не менее, мне просто захотелось поменять оконным менеджер на что-нибудь другое.
Sawfish
Сначала я попробовал Sawfish.
Sawfish — интересный проект, и когда-то использовался в качестве оконного менеджера в GNOME. У Sawfish интересная судьба. Когда его создатель Джон Харпер в начале века не смог больше поддерживать проект, в GNOME его заменили на ныне используемый Metacity. На данный момент дальнейшее развитие Sawfish осуществляется силами сообщества, выходят новые релизы librep и самого Sawfish.
Sawfish построен на базе простой встраиваемой реализации Лиспа под названием librep. По современным меркам это велосипед, понадёргавший всякого из других Лиспов.
Sawfish обеспечивает оконные декорации и контекстные меню. Но центральное место в программе, конечно, занимает полный доступ ко всем примитивам с помощью Лиспа. Ну, типа
(maximize-window (select-window))
разворачивает текущее окно и всё тому подобное. Всё конфигурирование тоже с помощью Лиспа. Ну, типа
(bind-keys global-keymap "C-TAB" 'cycle-windows)
привязывает C-TAB
к действию по перебору окон и всё тому подобное. Sawfish — это такой Емакс, только оконный менеджер.
Sawfish — не плиточный оконный менеджер (как wmii), но его поведение полностью программируется, так что это, в принципе, не недостаток.
Есть ещё графический конфигуратор sawfish-ui(1)
.
С запущенным Sawfish в традиционной REPL-манере можно общаться с помощью программы sawfish-client(1)
. Есть режим для Емакса, который позволяет выполнять формы в контексте Sawfish с помощью привычного C-x C-e
.
Sawfish занятен, но для меня в нём что-то всё-таки не то. И ещё он не захотел привязывать кнопку XF86Launch1
на моей клавиатуре.
StumpWM
StumpWM целиком написан на Common Lisp с использованием CLX,
Мне он очень понравился. Вообще ничего лишнего — никаких декораций, никаких меню.
В модели StumpWM экран может делиться на несколько «frames» (концептуально это то же самое, что «windows» в Emacs). В каждом фрейме может быть показано одно из запущенных окон. У меня обычно всего один фрейм, так что все текущее окно занимает весь экран. Окна можно собирать в группы и переключаться между группами с сохранением конфигурации фреймов.
Это статический плиточный оконный менеджер. От динамического wmii он отличается тем, что менеджер по умолчанию не выполняет никаких действий по вписыванию вновь создаваемых окон в текущую конфигурацию плиток.
Настраиваемость StumpWM, естественно, абсолютная. Да что там, можно весь оконный менеджер на лету переписать.
Дополнительным понятием в StumpWM является Mode Line, которая идёт вдоль одной из сторон экрана и на которую можно выводить всякие ништяки типа списка открытых окон. Я этой полосочкой не пользуюсь и не включал её. Вся информация и так доступна по единобразным сочетаниям клавиш в виде, например, появляющегося в уголке списка окон.
Мне понравились сочетания клавиш по умолчанию. В духе Emacs. Стандартный префикс — C-t
.
StumpWM хорошо поддерживает несколько мониторов и Xinerama. Однажды я куплю себе ещё два монитора и буду юзать эту фичу.
С запущенным StumpWM можно и нужно общаться через обычный SLIME :)
В общем, очень нравится, и на душе как-то тепло от использования такого менеджера.