Некоторое время назад я публиковал здесь статьи по настройке ion3. Всё течёт, всё меняется, и сейчас я использую другой фреймовый оконный менеджер — xmonad. С русской документацией по нему сейчас дело обстоит лучше, чем обстояло с ion3, когда я начал писать о нём. Именно, есть довольно основательная статья xmonad: функциональный оконный менеджер. Так что с вопросами «что такое xmonad» отсылаю туда. Однако, когда есть одна только вводная документация — этого всё-таки недостаточно. Хочется примеров настройки и всяческих вкусностей. И их есть у меня! 😉
Во вводных статьях по xmonad обычно рассматриваются три стандартные «компоновки» (способа автоматического расположения окон): Full, Tall и Mirror Tall. «Контрибы» xmonad содержат ещё довольно много компоновок, однако даже базовые могут использоваться более чем одним способом. Например, компоновку «Tall 1 (1/100) (2/3)» (что означает: одно мастер-окно, занимающее по ширине 2/3 экрана, за раз ширина его может меняться на 1/100) я использую для чтения документов и книг: основную часть экрана занимает окно документа, а сбоку может быть что-то ещё. Конечно, такую компоновку можно сделать и «на ходу» из стандартной Tall несколькими нажатиями (по умолчанию) mod-l, но если есть уже сделанная заготовка — проще обратиться к ней. Итак, «хитрость» первая: делайте «заготовки» из настроенных компоновок, чтобы потом быстро к ним обращаться.
Для того, чтобы удобнее было обращаться к конкретным компоновкам, есть расширение XMonad.Layout.Named. Делаем
import XMonad.Layout.Named
и потом в определении layoutHook описываем компоновки, давая им имена. Например, вместо tiled пишем named «dwmtiled» tiled, где «dwmtiled» — выбираемое вами имя компоновки.
По умолчанию для переключения компоновок используются сочетания mod-space (следующая компоновка) и mod-shift-space (предыдущая). Однако, когда компоновок больше чем 2-3, это становится неудобно. Удобнее переключаться сразу на нужную компоновку. Я использую для этого сочетания клавиш типа mod+буква. Чтобы такое себе устроить, подправьте в xmonad.hs строку с импортом модуля XMonad: вместо «import XMonad» напишите
import XMonad hiding ( (|||) )
Это мы указали, что не хотим использовать оператор ||| (служащий для перечисления компоновок), определённый в модуле XMonad. Зато мы будем использовать одноимённый оператор, определённый в модуле LayoutCombinators. Итак,
import XMonad.Layout.LayoutCombinators
Оператор ||| из LayoutCombinators «умнее», и позволяет переключаться сразу на нужную компоновку. Теперь описываем сочетания клавиш для этого переключения:
... , ((modMask, xK_d ), sendMessage $ JumpToLayout "dwmtiled") , ((modMask, xK_m ), sendMessage $ JumpToLayout "mirror") ...
где «dwmtiled», «mirror» — имена соответствующих компоновок.
Однако переключение на указанную компоновку — только побочная задача модуля LayoutCombinators. Главное его назначение состоит, соответственно названию, в том, чтобы комбинировать компоновки. Этот модуль содержит операторы типа ***||**. Такие операторы разбивают экран на две части, в каждой из которых работает своя компоновка. Количество звёздочек слева и справа показывает, в каком отношении разбивать экран (скажем, упомянутый оператор делит экран в отношении 3:2). Операторы с вертикальными чертами (|) делят экран по вертикали, а с наклонными (например, ***//*) — по горизонтали. Операторы, в которых две черты (вертикальные или наклонные), позволяют во время работы изменять соотношение частей экрана (перетаскивая границу мышкой), а операто