DыWиM легко

Я не смог бы жить как забавный бородач Р. Столлман — работать только в текстовой консоли, там писать, кодить, проверять почту, общаться.

Мне нужны X-ы. А значит нужен и оконный менеджер. Я давно уже привык к тайлингу. Использую его повсеместно — дома, на работе, на нетбуке, на экранах от 22″ до 7″. Сегодня мой рассказ будет как раз о 7″.

Долгое время мой EeePC 701 был моей единственной рабочей машиной. Еще в светлые университетские деньки я писал на нем диплом, изучал Java, работал с 8-битными контроллерами. С тех пор нетбук стал для меня просто маленьким компьютером.

Да, где-то в глубине меня сонный эстет нашептывал: «поставь MeeGo или Moblin — это же нетбук!». Моё решительное «нет» сохранило на нем Gentoo двухлетей давности.

Раньше я использовал в качестве оконного менеджера Ion3. Я прощал ему многое — и кривые шрифты, и неудобные хоткеи, и черные полосы между терминалами, и корявый трей. Последней каплей стало тихое падение официального сайта проекта под сумасшедшее хихиканье его автора.

Искал форки. Поставил anion3, но показалось что он сыроват еще. Хотя за Xft разработчикам спасибо.

Так я окунулся в неспокойную пучину поиска. Требования мои были следующие:

  • Тайлинг. Окна должны занимать все доступное им пространство в пределах рабочего стола.
  • Максимум свободного места (тонкие заголовки окон, небольшая панель/статусбар)
  • Все действия с окнами должны выполняться с помощью горячих клавиш. Желательно интуитивно понятных.
  • Удобство в настройке. Конфиг должен быть таким, чтобы его можно было осилить за вечер.
  • Информация о свободной памяти, заряде батарей, дате/времени должна быть под рукой.
  • Малый размер — оконный менеджер не должен тянуть за собой 100 мб зависимостей, да и сам весить столько же.

Ответ нашелся довольно быстро. Труднее было уговорить себя попробовать это. Да, 2000 строк кода — это очень немного для оконного менеджера. Да, отсутствие конфигурационного файла противоречило моим требованиям. Да и динамиеский тайлинг тоже вызывал сомнения.

Жажда минимализма (или приключений?) взяла верх. 2000 строк кода позволят легко  понять в случае надобности почему что-то не работает. Конфиг на C — это необычно, но легко. Да и не каждый же день я меняю настройки WM. И с тайлингом таким можно смириться — на 7″ больше 3-х окон и не влезет — нужно ли их как-то хитро тайлить?

Я решился. Вы со мной? Тогда:


hg clone http://hg.suckless.org/dwm

Ну вот. Вроде бы не так страшно. Репозиторий получили. Если у кого-то нет меркуриала — на сайте можно поискать архивы с исходниками.

Копируем config.def.h в config.h (желающие могут конечно писать с нуля).

Прежде чем заставить малыша ворочать окна, заглянем ему в душу:


/* appearance */
static const char font[]            = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#cccccc";
static const char normbgcolor[]     = "#cccccc";
static const char normfgcolor[]     = "#000000";
static const char selbordercolor[]  = "#0066ff";
static const char selbgcolor[]      = "#0066ff";
static const char selfgcolor[]      = "#ffffff";
static const unsigned int borderpx  = 1;        /* border pixel of windows */
static const unsigned int snap      = 32;       /* snap pixel */
static const Bool showbar           = True;     /* False means no bar */
static const Bool topbar            = True;     /* False means bottom bar */

Все ясно как день. font — мой любимый терминус. Даже менять не пришлось, разве что размер уменьшил. Да, конечно, ни о каком Xft речи быть не может. Поэтому у кого непереносимость terminus или fixed — ищите выход. Какой нибудь надежный и простой.

normbordercolor, setlbordercolor, normbgcolor, normfgcolor, selbgcolor, selfgcolor — все буйство красок dwm’а в этих шести строчках. Это цвета текста/фона для панели dwm и для рамок вокруг окон. Дальтоники вроде меня — вооружаемся Kuler’ом и ищем гармонирующие цвета (хотя казалось бы — зачем?). Особое внимание уделяем рамкам — только по ним будете ориентироваться в каком окне фокус. Толщину этих самых рамок — по вкусу, впрочем как и «привязку» окон, позицию панельки и её видимость.

Чуть ниже в конфиге нежным бутоном раскрываются все возможности его тайлинга.

/* tagging */
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };

static const Rule rules[] = {
 /* class      instance    title       tags mask     isfloating   monitor */
 { "Gimp",     NULL,       NULL,       0,            True,        -1 },
 { "Firefox",  NULL,       NULL,       1 << 8,       False,       -1 },
};

/* layout(s) */
static const float mfact      = 0.55; /* factor of master area size [0.05..0.95] */
static const Bool resizehints = True; /* True means respect size hints in tiled resizals */

static const Layout layouts[] = {
 /* symbol     arrange function */
 { "[]=",      tile },    /* first entry is default */
 { "><>",      NULL },    /* no layout function means floating behavior */
 { "[M]",      monocle },
};

Да, вместо рабочих столов здесь теги — группы окон, связаных какой-то общей задачей. Теоретически одно окно может быть в нескольких тегах одновременно. Теперь мне это даже кажется удобным. Переменная tags[] позволяет вам решить сколько тегов вам надо и как их величать. Кому-то по душе греческие буквы, кому-то имена нимф, кому-то цинично-офисные «web»/»code»/»im»/»term»/… Я оставил цифры потому что места занимают мало, а запомнить их легко.

Массивчик rules[] задает фиксированные правила для приложений. Я еще особо не вникал — надобности не было, но ПламяЛис у меня открывается только в 9-м теге (из-за маски тега (1<<8). Впрочем, это даже удобно.

Еще ниже видим загадочное соотношение окон в режиме тайлинга и какой-то флажок. Знать не знаю к чему это они.

Дальше идут режимы размещения окон — layouts. Основных три. Первый дефолтный — тайлинговый. Слева одно большое окно, справа — все остальные друг на друг. В панели обозначается значком «[]=». Псевдо-рыбка (?) показывает отсутствие лэйаута — все окна плавают в возухе и перекрывают друг друга. Послений режим с аристократическим названием «монокль» распахивает во всю ширь все окна (типа full-screen). Кому хочется более замысловатых режимов — добро пожаловать на сайт, качайте патчи, пользуйтесь.

Ну что, перейдем к клавишам пока они еще горячие.

#define MODKEY Mod1Mask

/* commands */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[]  = { "uxterm", NULL };

static Key keys[] = {
	/* modifier                     key        function        argument */
	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
	{ MODKEY,                       XK_b,      togglebar,      {0} },
	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
	{ MODKEY,                       XK_Return, zoom,           {0} },
	{ MODKEY,                       XK_Tab,    view,           {0} },
	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
	{ MODKEY,                       XK_space,  setlayout,      {0} },
	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
	{ MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
	TAGKEYS(                        XK_1,                      0)
	TAGKEYS(                        XK_2,                      1)
	TAGKEYS(                        XK_3,                      2)
	TAGKEYS(                        XK_4,                      3)
	TAGKEYS(                        XK_5,                      4)
	TAGKEYS(                        XK_6,                      5)
	TAGKEYS(                        XK_7,                      6)
	TAGKEYS(                        XK_8,                      7)
	TAGKEYS(                        XK_9,                      8 )
	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
};

MODKEY по умолчанию у них — Alt. Мне по душе больше Win, поэтому поменял на Mod4Mask. Дальше расскажу только об основных сочетаниях — остальное вкусите сами на десерт.

Win+k,Win+j — переход между окнами

Win+h, Win+l — изменить ширину окон (в тайлинговом режиме)

Win+1..Win+9 — переход к 1..9 тегу

Win+Enter — открыть терминал (заменил сразу на Win+Z)

Win+F12 — окрыть «меню» для запуска программ. Заменил на Win+X от слова eXecute.

Win+B — показать/скрыть панельку DWM. Для эффекта полного full-screen.

Win+Tab — переключаться между двумя последними тегами. Удобно если работаешь, скажем, с 1-м и 8-м тегами — чтоб не тянуться пальцами.

Win+T, Win+F, Win+M — использовать Тайлинг, плаFающие окна или Mонокль.

Ну вроде бы все. Пробуйте на здоровье. Скриншоты этого дела я выложу позже, заодно и расскажу чего может не хватать «из коробки» и как с этим бороться.

Win+Shift+C — закрыть окно (оказалось намного удобнее моего старого Win+F4)

Win+Shift+Q — выйти из DWM.

Ну вот и все. Делаем make, потом make install. Готово. Прописываем dwm в .xinitrc или что у вас там — и наслаждаемся. На мой взгяд dwm — отличный выбор для нетбука. И не надо говорить что он только для стареющих гиков. Простые программы — это нормально. Настроить программу полностью под себя за полчаса — это тоже нормально.

Да, многого он не умеет. Об этом я буду писать дальше. Но он чудесно справляется с главным — он управляет окнами. И делает это просто и непринужденно.

Реклама

3 comments on “DыWиM легко

  1. Анонимный Круглик:

    А на моем нетбуке тоже dwm. Правда там нет красивых графических conky, пока только текстовые, но я учусь, тем более мне есть у кого)

  2. Misanthrop:

    А разве не бесит, когда фокус следует за мышью?

    • Ни капли. С dwm же мышью практически не пользуются 🙂 К тому же, тачпоинтом на ноуте тоже очень удобно переключать окна.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s