Настройка dwm: Патчи

Настройка dwm Патчи

Расширение функционала dwm производится с помощью патчей. Это менее гибкое решение по сравнению с плагинами. У него есть свои преимущества и недостатки. Но сейчас не о них, а о том, как же применять готовые патчи в своей сборке dwm.

Официальные патчи для dwm ищите на ресурсе: http://dwm.suckless.org/patches/. В этой статье я их буду брать именно оттуда.

Устанавливаем первый dwm-патч: fancybar

Как и во вводной статье по dwm, я буду пользоваться abs в Archlinux. Если вы собираете dwm из исходников, то отличий будет не так уж много. На самом деле, процедура становится даже проще.

Первым делом нужно скачать сам патч. Одним из самых простых является fancybar. Он меняет стандартное поведение dwm таким образом, что на верхней панели отображаются имена всех окон в текущем тэге. По умолчанию же выводится только имя окна в фокусе.

Ссылка на страницу патча fancybar: http://dwm.suckless.org/patches/fancybar. Имеет значение то, какая у вас версия dwm. Патч может не заработать, если версия окажется несовместимой. Узнать версию dwm можно с помощью команды:

У меня dwm-6.1. Поэтому я скачиваю соответствующий патч dwm-6.1-fancybar.diff. Сохранять его лучше всего в /var/abs/local/dwm/.

Патч представляет собой файл описания различий между чистой версией программы и ее доработанной копией.

Если вы используете abs и следуете моим советам из прошлой статьи, то откройте файл /var/abs/local/dwm/PKGBUILD. Отредактируем в нем секции source и prepare():

Мы изменили только последние строки. Указали, что используем дополнительный файл dwm-6.1-fancybar.diff. А также задали, что перед сборкой нужно применить патч с помощью вызова команды:

Если вы собираете dwm из исходников, то просто используйте патч, выполнив команду выше. Учитывайте пути к файлам.

Теперь осталось обновить dwm. Выполните следующую команду из каталога /var/abs/local/dwm/:

Патч dwm для отображения системного трея: systray

Теперь перейдем к более полезному, но и более сложному патчу. В dwm по умолчанию нет никакого системного трея. Исправим это.

Скачать патч systray можно по адресу http://dwm.suckless.org/patches/systray.

Вновь меняем /var/abs/local/dwm/PKGBUILD:

Запускаем команду:

И получаем целую кучу ошибок. Битый патч? Нет. С патчем все в порядке. Загляните в него. И обратите внимание на фрагмент:

Проблема в том, что патч применяется к файлу config.def.h. А при сборке dwm используется наша версия /var/abs/local/dwm/config.h. Добавим в начало этого файла следующие объявления констант:

Сохраняем файл и вновь запускаем сборку dwm. Теперь все хорошо и мы можем порадоваться полноценному системному трею после перезапуска.

Патч dwm для сохранения позиций плавающих окон: save floats

Патч save floats не настолько полезен, как предыдущие, но на его примере мы рассмотрим еще одну потенциальную проблему. Сам патч всего лишь сохраняет позицию и размеры плавающих окон, которые будут восстановлены, если окно перейдет в тайловый режим и обратно.

Патч я скачал отсюда: http://dwm.suckless.org/patches/save_floats. Затем обновил PKGBUILD. Запустил сборку и увидел сообщение об ошибке:

Патчи зависят от состояния кода. Если есть несоответствия, то патч применить не получится. В частности, все может сломаться даже от изменения порядка использования патчей. Например, если сначала пропатчить dwm systray, то fancybar уже работать не будет.

Откроем файл /var/abs/local/dwm/src/dwm-6.1/dwm.c.rej:

Здесь указан проблемный фрагмент. Строки, в начале которых стоит -, должны быть убраны, а у которых +, — добавлены.

Сравниваем с оригинальным файлом /var/abs/local/dwm/src/dwm-6.1/dwm.c.orig:

Я скопировал всю функцию, которая будет подвержена изменениям. Теперь давайте поиграем в игру «Найти отличия». Я вижу ровно два. Первое:

В оригинальном файле после if есть пробел. А в патче нет.

Второе:

В качестве последнего аргумента в оригинальном файле передается 0, а в патче — False.

Исправим файл патча /var/abs/local/dwm/dwm-6.1-save_floats.diff:

Повторная попытка привела нас к успеху. Патч работает.

Патч dwm для отображения второй строки статуса: dualstatus

Еще один патч, который не заработал у меня сразу. К тому же, он может оказаться полезным. Встречайте dualstatus. Он позволяет отображать вторую панель в нижней части экрана. Чем не альтернатива conky?

Итак. Скачиваем патч: http://dwm.suckless.org/patches/dualstatus. Делаем все, что нужно. Запускаем на сборку, и получаем ошибку:

Снова смотрим проблемный фрагмент в /var/abs/local/dwm/src/dwm-6.1/dwm.c.rej:

Сравниваем с /var/abs/local/dwm/src/dwm-6.1/dwm.c.orig:

В этот раз отличие сразу бросается в глаза. В патче мы видим:

А в оригинале:

Исправляем /var/abs/local/dwm/dwm-6.1-dualstatus.diff:

Теперь патч работает. Но рано радоваться. Собрать dwm мы все еще не можем. На этот раз произошла ошибка компиляции:

Из этого сообщения легко понять, что не хватает определения переменной или константы с именем extrabar. Смотрим еще раз в /var/abs/local/dwm/dwm-6.1-dualstatus.diff. И видим, что там и правда объявлена такая константа:

Еще раз возвращаемся к нашему /var/abs/local/dwm/config.h. И добавляем следующее:

Вот теперь все собирается и работает. Чтобы выводить информацию на нижнюю панель, используйте уже знакомую нам команду xsetroot. Сообщение для верхней и нижней панелей нужно отделять с помощью точки с запятой. Например:

Выводы

Установка патчей для dwm довольно творческий и нетривиальный процесс. Нужно обладать минимальными знаниями программирования. А также иметь терпение и внимательность. Если у вас все это есть, то успех гарантирован.

Возникли вопросы по установке какого-то конкретного патча, который я не рассмотрел? Спрашивайте в комментариях.

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (Пока оценок нет)
Загрузка...
Понравилась статья? Поделиться с друзьями:
Добавить комментарий