?

Log in

про dwm - Из ненаписанного [entries|archive|friends|userinfo]

[ website | PLHK ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

про dwm [Вт 15 авг 2006 20:39:00]
polachok
[Музыка |сплин - джим]

Я уже однажды (сцылко) писал про wmii3 - первом динамическом оконном менеджере. Но с тех прошло
хоть и не так много времени, но кое-какие вещи изменились. Одна из них мой оконный менеджер.
Не спешите радоваться упрямые поклонники традиционных перекрывающихся окон. Нет, в ваш лагерь
я похоже в ближайшее время не вернусь (не люблю говорить никогда). Так на что же я променял
wmii? На dwm. Если вам показалось что в wmii слишком много "фич" dwm явно не для вас. Здесь их
еще меньше, например отправлена на свалку истории поддержка 9p-протокола, одна из ключевых
особенностей wmii. Туда же отправилась и поддержка конфигурационного файла, который как известно
прочитавшему мой предыдущий опус представлял из себя скрипт или иной вид исполняемого файла,
который занимался выставлением некоторых переменных и определением событий происходящих
при нажатии сочетаний клавиш и кликов по статусбару. Что же дает взамен dwm? Исключительную
простоту и удобство использования. dwm написан майнтайнером проекта wmii3, который решил что
wmii для него избыточен, а путь по которому идет развитие wmii4 и вовсе неправильный и основал
проект 10kloc.org. На этом сайте он и описал свои мысли по поводу развития современного ПО.
Основная идея: невозможно понимать код, содержащий более 10000 строк, с ростом количества строк
растет и количество ошибок, это же влечет и падение производительности.
dmenu
Итак, если я вас убедил - переходим к установке dwm. Если вы уже знакомы с wmii и привыкли к
ее менюшке можете скачать dmenu. Я всегда его использую, с него и начну.
tar -xvzf ./dmenu-0.4.tar.gz
cd ./dmenu-0.4
ls
config.arg.h dmenu.1 LICENSE README
config.default.h dmenu.h main.c util.c
config.mk draw.c Makefile
cat *|wc -l
852
То бишь dmenu 0.4 содержит 852 LOC. Меньше 1K :) И все что оно умеет - принять со стандартного
ввода список слов разделенных пробелами, показать его на экране и вернуть в стандартный вывод
выбранное слово. Кстати, вы можете использовать dmenu в сочетании с каким угодно wm/de,
создав небольшой скрипт вроде
#!/bin/sh
ls -lL `echo $PATH|tr : ' '` 2>/dev/null | awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u | dmenu
выполняться он будет я б не сказал чтоб очень быстро, потому
если не хотите ждать и устанавливать программы во время сеанса
можете сделать так:
#!/bin/sh
proglist() {
ls -lL "$@" 2>/dev/null | awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u
}
export PROGS_FILE=`mktemp /tmp/.wmiimenu.proglist.XXXXXX` || exit 2
proglist `echo "$PATH" | tr : ' '` >$PROGS_FILE
поместить вызов этих команд в ./.xsession (.xinitrc), а потом
уж вызывать dmenu < $PROGS_FILE.
Если не нравятся шрифты или цвета (такое часто бывает :) )
делаем так:
cp ./config.default.h ./config.h
vi(nano,emacs и тд) config.h
ну да, это сишный хедер (file config.h config.h: ASCII C program text),
но не стоит этого пугаться даже непрограммистам: не так страшен Си как его малюют!
Вот собственно перед нами конфигурационный файл, похож на стандартный формат конфигурационных
файлов UNIX: параметр - значение, ну и еще какое-то странное слово define. Но оно нас с вами не
интересует, мы не Си учим а dmenu настраиваем. Собственно из названий переменных их назначение
вполне ясно, по порядку: шрифт (в иксовом формате, можно выбрать через xfontsel), цвет фона,
цвет шрифта и бордюра. Выставляем по вкусу. Далее make; make install. Если же не нравится
умолчальный префикс - /usr/local меняем в файле config.mk. Я так все в ~/Programs ставлю, но
это дело вкуса и возможностей. Затем, как обычно, make ; make install.

dwm
tar -xvzf dwm-0.9.tar.gz
cd ./dwm-0.9
cat *|wc -l
2360
cp ./config.default.h ./config.h
vi[nano,emacs..) config.h
ну да тут немного побольше файл и посложнее, а кто обещал что все будет элементарно?
Первое, что можно (нужно?) настроить - имена тэгов. По умолчанию это 0,1,2.. выберите более
подходящие имена и не забывайте теги - не воркспейсы, а наименования группы окон, потому лучше
всего подойдут названия вроде work, net, devel и тд. Поехали дальше:
DEFMODE - как располагать окна по умолчанию - как в wmii/ion - чтоб не перекрывались или как
в традиционных менеджерах. Нельзя почувствовать всю прелесть dwm не выбрав первый!
DEFTAG - тэг по умолчанию. 1 значит второй, это такой сишный прикол, счет ведется с нуля :)
FONT/BG-FG-BORDER-COLOR я уже пояснял
MODKEY - это Mod1 т.е. ALT. Можно выбрать и ShiftMask, ControlMask, но тогда придется переписывать
всю следующую секцию, оставим эту идею :)
секция KEYS - горячие клавиши. вид ее таков:
модификатор(ы) клавиша вызываемая функция аргументы вызываемой функции
Модификатор обычно MODKEY, можно указать до трех штук, таким вот образом MODKEY|ControlMask|ShiftMask,
это означает Alt+ctrl+shift+клавиша.
функции - spawn - запуск аргумента, можно в качестве него указать любую шелл-конструкцию
вроде уже обсужденной "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null | " \
k 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`
Если на вашей клавиатуре имеются т.н. мультимедиа-клавиши использовать их можно следующим
образом: добавьте строку "#include "/usr/X11R6/include/X11/XF86keysym.h" в начало config.h,
а в секцию KEYS что-то вроде
{ 0, XF86XK_AudioNext, spawn, { .cmd = "exec `mpc next`" } }, \
focusnext - следующее окно
focusprev - предыдущее
zoom - увеличить окно в фокусе (т.е. разместить на тех процентах экрана, что указаны в
переменной MASTERW)
togglemax - максимизировать окно на весь экран
tag - отметить окно соответствующим тэгом (считать с нуля!) (остальные отметки обнуляются)
toggletag - отметить "еще и этим" тегом
killclient - закрыть окно
togglemode - переключить режим tile/float
view - увидеть тег
toggleview - увидеть "еще и этот тег"
quit - выход собственно :)
Теперь правила - RULES. Это правила размещения окон по тегам. Т.е. если вы на любом тэге
запустите Firefox он все равно будет отмечен вторым тэгом, и появится именно на нем.
формат таков:
класс окна (регулярное выражение) тэги плавающий
Гимп например объявлен плавающим - его окно растянутое на 60% экрана выглядит весьма гадко...
На этом все - make;make install. Хотя нет, не все еще можно чего-нибудь добавить в статус-бар. Для
этого нужно передать нужные данные на стандартный ввод dwm через конвейер:
например вот так показано в README:
while true
do
echo `date` `uptime | sed 's/.*://; s/,//g'`
sleep 1
done | dwm

а вот мой вариант:
while true
do
echo "MPD: [`mpc | sed -n '2s/\[\(.*\)\].*/\1/;2s/playing/p/p;2s/paused/s/p;2s/stopped/t/p'`] `mpc | sed -n '1p'` `mpc | sed -n '2s/.*\]//p'|cut -d ' ' -f 2,6` | bat0: $(eval echo `grep remain /proc/acpi/battery/BAT0/state|cut -d ' ' -f 8`*100/4423 | bc) cpu0: `echo $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)/1000 | bc` | `date` `uptime | sed 's/.*://; s/,//g'`"
sleep 2
done | dwm
Это все нужно добавить в ~/.xinitrc или ~/.xsession

На этом вроде бы и пора закончить :) Наслаждайтесь отличным легким, быстрым и удобным
оконным менеджером!

</lj>
Ссылка