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


Понравилась статья? Поделись с друзьями!




Комментарии на этом сайте требуют включенного Javascript в вашем браузере. Вероятно, ваш браузер не поддерживает Javascript, или он был отключен по каким-то причинам. Если вы хотите прокомментировать пост, или просто почитать комментарии, то пожалуйста, включите Javascript или попробуйте открыть эту страницу другим браузером.