Musca wm
Не так давно, появился новый очень не плохой тайловый оконный мэнеджер под названием musca. По заявлению разработчиков, он вобрал в себя все лучшее от dwm и ratpoison. Отчасти это правда. Сам я пользуюсь им около месяца и более чем им доволен! Отличает его простой конфиг чем-то напомнивший мне конфиг ratpoison. И так, все по порядку.
Сам по себе, musca, не имеет никаких панелей, и не умеет рисовать фон, собственно как и должно быть. Зато в нем есть возможность, не управлять какими либо приложениями. Т.е. допустим вы хотите себе панель задач, или трэй. Ставим pypanel или trayer и просто добавляем в конфиг manage off trayer или manage off pypanel. Лично я, использую для вывода нужной мне информации dzen2 в связке с conky-cli (умеет выводить информацию только в консоль). Для панелей и прочего, можно назначить отступ от любого из краев. Для этого служит команда pad left right top bottom (вместо left right top bottom нужна указать свои значения в цифрах). Кстати, команды можно отдавать прямо на ходу.
В musca нету рабочих столов или тэгов. Тут немного другая система. Есть группы, их может быть сколько угодно. В каждой группе - фрэймы. И так, проводя аналогию, группы = столы\тэги, фрэймы = окна. Фрэймы можно расположить весьма хаотично. Кстати, работа с фрэймами мне особо нравиться. Во первых, в каждом фрэйме, можно запустить несколько окон, если быть точным, то запустить можно сколько угодно окон, и переключатся между ними средствами dmenu(так же можно переключать и группы). Т.е. по хоткею, появиться dmenu со списком всех окон в этом фрэйме. Так же, окна можно просто свернуть дабы не мешались. У каждого фрэйма есть три режима:
- Обычное поведение
- Для всех новых окон
- Занятый фрэйм
Думаю из названия каждого понятно что это и зачем, но на всякий случай объясню. Если пометить фрэйм как занятый, то новые окна, не будут попадать в него. Если пометить его для всех новых окон, то все новые окна будут попадать соответственно в него. Ну и обычный режим это режим, при котором сам(сама ?) musca определяет что и куда.
Musca - нединамический тайловый wm. Т.е. окна располагать самому. Для кого-то это плюс, для кого-то минус. Зато можно задать разбивку и где какое приложение запускать в стартовом файле. Но тут есть некоторые нюансы, один из которых то, что муська не ждет пока запустить какое либо приложение. Т.е. загрузившись, нужное приложение может оказаться в другой группе, что может быть неприятно учитывая то, что переместить приложение в другую группу, нельзя или я не нашел как =) Еще можно сделать дамп разбивки и загрузить его при загруке или когда Вам это удобнее.
Конечно он не лишен и недостатков. Во первых, если сделать отступы то появляются разрывы между фрэймами что меня лично, раздражает. Так же, как я писал выше, нельзя переместить приложение в другую группу. Ну и еще парочка мелких багов с которыми другие могут и не столкнуться. Самое главное, не стоит забывать, что musca еще очень сырая. Очень много ошибок исправляют от версии к версии.
На прощание скриншот(не знаю зачем, они вроде все одинаковые, но на нем виден баг с разрывами)
и мой хорошо задокументированный ~/.musca_start
:
set border_focus #ffff00
set border_unfocus #aa8800
### BINDINGS
# деление фрейма хоткеями пополам -- горизонтально и вертикально, соответственно
bind on Mod4+Shift+h hsplit 1/2
bind on Mod4+Shift+v vsplit 1/2
# удаление фрейма
bind on Mod4+Shift+r remove
# удаление всех фреймов в группе кроме текущего, последний занимает место всей группы
bind on Mod4+Shift+o only
# аварийное завершение работы текущего окна
bind on Mod4+k kill
# переключение между окнами текущей группы в текущем фрейме; local переключает во фрейме только те окна, которые в нём ранее открывались
bind on Mod1+Tab cycle local next
bind on Mod4+Shift+Tab cycle local prev
# выбор текущего фрейма в группе
bind on Mod4+b focus left
bind on Mod4+f focus right
bind on Mod4+p focus up
bind on Mod4+n focus down
# Super+PgDn и Super+PgUp -- переключение между группами
bind on Mod4+Next use (next)
bind on Mod4+Prior use (prev)
# не знаю :) переписал на всякий случай. Возможно это нужно для поддержки работы нескольких экранов (но у меня только 1 монитор)
bind on Mod4+Tab screen (next)
# вызов dmenu с перечнем всех окон
bind on Mod4+Shift+w switch window
# вызов dmenu с перечнем всех групп
bind on Mod4+Shift+g switch group
#запуск dmenu с перечнем всех установленных программ -- штатное средство запуска программ
#bind on Mod1+F2 shell
# Вызывает меню команд musca через dmenu, то же происходит по нажатию Super+M
bind on Mod4+Shift+x command
# пометить фрейм как занятый для открывающихся окон
bind on Mod4+Shift+d dedicate flip
# пометить фрейм для размещения в нём всех новых окон
bind on Mod4+Shift+a catchall flip
# отмена последней манипуляции с musca (!)
bind on Mod4+Shift+u undo
# переключение в режим плавающих окон
bind on Mod4+Shift+s stack flip
# перетаскивания окна между фреймами
bind on Mod4+Shift+b swap left
bind on Mod4+Shift+f swap right
bind on Mod4+Shift+p swap up
bind on Mod4+Shift+n swap down
# изменение размеров текущего фрейма
bind on Mod4+Control+b resize left
bind on Mod4+Control+f resize right
bind on Mod4+Control+p resize up
bind on Mod4+Control+n resize down
# выход из musca ;)
bind on Mod4+Shift+q quit
name trm
#exec urxvt -pe tabbed
#use trm
hook on add pad 0 0 14 0
add sht
add ff
hook on add pad 0 0 14 0
#exec firefox
add torrent
hook on add pad 0 0 14 0
exec qtr
hook on add pad 0 0 14 0
add vbox
hook on add pad 0 0 14 0
border off
add video
hook on add pad 0 0 14 0
border off
add w06
hook on add pad 0 0 14 0
add w07
hook on add pad 0 0 14 0
add w08
hook on add pad 0 0 14 0
use trm
hook on add pad 0 0 14 0
#Перемещене по группам (воркспейсам)
bind on Mod4+1 use 0
bind on Mod4+2 use 1
bind on Mod4+3 use 2
bind on Mod4+4 use 3
bind on Mod4+5 use 4
bind on Mod4+6 use 5
bind on Mod4+7 use 6
bind on Mod4+8 use 7
bind on Mod4+9 use 8
# Стандартные биндинги
bind on Mod4+t exec urxvt
# хоткеем можно запустить скрипт dmenfm, создающий из dmenu минималистичный файловый менеджер. Жаль, что для него необходимо отдельно
# настраивать dmenu -- средств для более плотнойинтеграции я не нашел. Впрочем, создавать интегрированную среду из оконного и файлого
# менеджера -- это уже путь DE (Desktop environments - полноценных рабочих окружений). Чуть подправленный мной скрипт привожу в конце статьи
bind on Mod4+z exec dmenfm
bind on Mod4+Shift+z exec dmenfm
### END OF BINDINGS
# вот примерно так осуществляются отдельные нефреймовые окна
manage off conky
manage off dzen2
# настройка переменных musca
# по умолчанию новое окно открывается в пустом фрейме, если такой есть, а не в текущем
set window_open_frame empty
# на вкус и цвет фломастеры разные -- я запускаю dmenu так
set dmenu dmenu -b -i -nb '#333333' -nf '#a8a3f7' -fn '-*-terminus-medium-r-normal--12-120-72-72-c-60-utf8-*'
#set dmenu dmenu -b -i -nb '#000000' -nf '#ffff00' -fn '-misc-dejavu sans mono-medium-r-normal-*-17-*-100-100-m-0-*-*'
#set dmenu dmenu -i -b -fn -*-ProggyClean-medium-r-normal-*-*-*-*-*-*-*-* -nb ForestGreen -nf black -sb LimeGreen -sf black
# а тут неплохо бы указать штатное средство вывода вербальной информации. Наверно, это всё-же будет dzen2, когда его освою :)
#set notify echo `cat`
# размеры рабочей части группы -- можно ограничить при использовании панелей и прочих апплетов-котлетов -- я не использую
# можно создать сколько-то групп для работы. я обычно создаю их в процессе работы. Впрочем, можно это дело также повесить на хоткеи.
# Т. к. я не знаю, как при запуске окно отправлять в конкретную группу -- при старте, чтобы окна не путались, использую
# только одну группу
# перерисовка текущего окна -- бывает, что некоторые окна болезненно реагируют на изменения размеров
bind on Mod4+Shift+f refresh
# создание группы с именем someone
bind on Mod4+Insert add someone
# удаление текущей или ближайшей из следующих группы с именем someone,
# все открытые в ней окна отправляются в следующую группу.
# Делаю так, потому, что не знаю, как удалять просто текущую группу без указания имени оной
bind on Mod4+Delete drop someone
# а вот так можно убрать рамку вокруг текущего фрейма,
# например. при просмотре фильма. Только я на знаю, как повесить переключатель
# включить/выключить рамку на 1 комбинацию, потому использую пару
bind on Mod4+i border on
bind on Mod4+Shift+i border off
#Таки повесим Хскринсейвер =)
bind on Mod4+Pause exec xscreensaver-command -lock
#Wallpaper
exec feh --bg-scale /mnt/mhard/pictures/FromUbuntuForums/picture2221.jpeg
#something
#export GTK_IM_MODULE="xim"
#exec xset r rate 300 40
# неудавшаяся попытка раскидывать окна по группам :-(
#load .musca_dump/work
exec xbindkeys
exec sh /home/bosheee/.conky/start.sh