Layout/ru

Общие положения
layout - это способ организации окон/клиентов на экране. Т.е. как именно и где именно будут располагаться окна, в каком порядке они будут открываться. Иконка текущей схемы находится (по умолчанию) в правом верхнем углу, и при переключении схемы она меняется.

Если вы изучите файл rc.lua, то можете обнаружить там секцию layout, которая выглядит следующим образом (нумерация не присутствует, я ее добавил для удобства дальнейшей настройки): layouts = {   awful.layout.suit.floating,         --1 awful.layout.suit.tile,            --2 awful.layout.suit.tile.left,       --3 awful.layout.suit.tile.bottom,     --4 awful.layout.suit.tile.top,        --5 awful.layout.suit.fair,            --6 awful.layout.suit.fair.horizontal, --7 awful.layout.suit.spiral,          --8 awful.layout.suit.spiral.dwindle,  --9 awful.layout.suit.max,             --10 awful.layout.suit.max.fullscreen,  --11 awful.layout.suit.magnifier        --12 }

Это схемы предусмотренные в Awesome по умолчанию. Если какие то из этих схем вам не потребуются, вы можете их удалить или закомментировать, и тогда Awesome не будет их использовать: -- awful.layout.suit.spiral,

Для переключения схемы в текущем теге используются клавиши modkey+space для переключения на следующую схему и modkey+Shift+space для переключения на предыдущую схему. Обычно в качестве клавиши modkey используется Win клавиша.

На первых порах для запоминания схем предлагаю вам использовать уведомления, отображающие название текущей схемы. Для этого в файле rc.lua найдите секцию Standart program и замените в ней: awful.key({ modkey,          }, "space", function  awful.layout.inc(layouts,  1) end), awful.key({ modkey, "Shift"  }, "space", function  awful.layout.inc(layouts, -1) end), на следующий код: awful.key({ modkey,          }, "space", function  awful.layout.inc(layouts,  1)                                              naughty.notify({ title = 'Layout', text = awful.layout.getname, timeout = 3 }) end), awful.key({ modkey, "Shift"  }, "space", function  awful.layout.inc(layouts, -1)                                              naughty.notify({ title = 'Layout', text = awful.layout.getname, timeout = 3 }) end),

Вообще, для изучения клавиш управления вашим Awesome, для начала ознакомьтесь с manpages.

floating
Окна в этом режиме окна могут свободно перемещаться и изменять свои размеры, и верхнее окно перекрывает нижние. Чем то этот режим похож на поведение окон в других DE(Gnome,KDE).

Этот режим используется для всех тегов в Awesome со стандартными настройками (из коробки).

Для перемещения окон по экрану необходимо нажать клавишу modkey(Win) и зажав левую кнопку мыши, перемещать окно по экрану. При нажатии modkey и правой кнопки мыши вы можете изменять размеры окна.

Кстати, в любой другой схеме, для того чтобы сделать перевести приложение в floating режим нужно нажать Modkey+Control+Space

Для переключения между клиентами вы можете использовать следующие клавиши: Modkey + j Следующий клиент. Modkey + k Предыдущий клиент. Modkey+Tab Переключение между предыдущим и текущим клиентов.

tile
Поведение окон отображено на следующей схеме. Где цифра в скобках показывает количество открытых окон, а цифра в клетке положение окна в порядке открытия. (1)               (2)                (3) +---+      +-+-+      +-+-+ +---+      +-+-+      +-+-+
 * |     |     |     |      |     |  2  |
 * 1    |  ->  |  2  |  1  |  ->  |  3  +-+  ->
 * |     |     |     |      |     |  1  |

(4)               (5)                (6) +-+-+      +-+-+      +-+-+ +-+-+      +-+-+
 * |    |      |     |     |      |     |  5  |
 * | 3  |      |     |  4  |      |     +-+
 * |    |      |     +-+      |     |  4  |
 * |    |      |     |  3  |      |  6  |  3  |
 * 4 |  2  |   -> |  5  +-+  ->  |     +-+
 * |    |      |     |     |      |     |  2  |
 * +-+     |     |  2  |      |     +-+
 * |    |      |     +-+      |     |  1  |
 * | 1  |      |     |     |      +-+-+
 * |    |      |     |  1  |
 * |    |      |     |  1  |

Здесь нужно пояснить, что вся схема делится на 2 части:
 * "master" зона,в данном случае она находится в левой части
 * "slave" зона (стек или вторичная зона), в данном случае она расположена в правой части

Для управления клиентами в мастер и стек зоне используйте следующие клавиши: Modkey + Shift + h Увеличить число окон в master зоне на 1. Modkey + Shift + l Уменьшить число окон в master зоне на 1.

Modkey + Control + h Увеличить число колонок для slave зоны на 1. Modkey + Control + l Уменьшить число колонок для slave зоны на 1. Поэкспериментируйте с этими клавишами, чтобы получить удобные для вас значения.

tile.left
Схема расположения окон в данном layout: (1)               (2)                (3) +---+      +-+-+      +-+-+ +---+      +-+-+      +-+-+
 * |     |     |     |      |  2  |     |
 * 1    |  ->  |  1  |  2  |  ->  +-+  3  |  ->
 * |     |     |     |      |  1  |     |

(4)               (5)                (6) +-+-+      +-+-+      +-+-+ +-+     |      |     |     |      +-+     | +-|     |      |  2  |     |      +-+     | +-+-+      +-+-+      Здесь "master" зона расположена справа, а "slave" слева. Если размер какой либо из зон вас не устраивает, то можно их увеличить/уменьшить: Modkey + h Уменьшить главную зону на 5%. Modkey + l Увеличить главную зона на 5%.
 * |    |      |     |     |      |  5  |     |
 * 3 |     |      |  4  |     |      +-+     |
 * |    |      +-+     |      |  4  |     |
 * |    |      |  3  |     |      |  3  |  6  |
 * 2 |  4  |   -> +-+  5  |  ->  +-+     |
 * |    |      |     |     |      |  2  |     |
 * |    |      +-+     |      |  1  |     |
 * 1 |     |      |     |     |      +-+-+
 * |    |      |  1  |     |

tile.bottom
Схема расположения окон в данном layout: (1)               (2)                (3) +---+      +---+      +---+ +---+      +---+      +-+-+
 * |     |     2     |      |     3     |
 * 1    |  ->  +---+  ->  +-+-+  ->
 * |     |     1     |      |  2  |  1  |

(4)               (5)                 (6) +---+      +---+      +--+ +---+---+---+  ->  +--+--+--+--+  ->  +--+--+--+--+--+ +---+---+---+      +--+--+--+--+      +--+--+--+--+--+
 * 4    |      |     5     |      |      6       |
 * 3 | 2 | 1 |     | 4| 3| 2| 1|      | 5| 4| 3| 2| 1|

Здесь "master" зона располагается сверху, а "slave" соответственно снизу.

Иногда вы открываете новое окно, а старое при этом смещается в стек зону, что не всегда удобно, в этом случае, можно клиенты поменять местами: Modkey + Shift + j Поменять текущий и следующий за ним клиенты местами. Modkey + Shift + k Поменять текущий и предыдущий клиенты местами. Еще можно зажав Modkey перетащить мышкой нужный клиент в мастер зону, в этом случае, они поменяются местами.

tile.top
Схема расположения окон в данном layout: (1)               (2)                (3) +---+      +---+      +-+-+ +---+      +---+      +---+
 * |     |     1     |      |  2  |  1  |
 * 1    |  ->  +---+  ->  +-+-+  ->
 * |     |     2     |      |     3     |

(4)               (5)                 (6) +---+---+---+      +--+--+--+--+      +--+--+--+--+--+ +---+---+---+  ->  +--+--+--+--+  ->  +--+--+--+--+--+ +---+      +---+      +--+--+--+--+--+
 * 3 | 2 | 1 |     | 4| 3| 2| 1|      | 5| 4| 3| 2| 1|
 * 4    |      |     5     |      |       6      |

В данном случае мастер зона расположена внизу, а стек зона сверху. И чтобы поменять любой выделенный клиент и находящийся в мастер зоне, можно использовать: Modkey + Control + Return Поменять текущий и главный клиенты местами.

fair
Схема расположения окон в данном layout: (1)               (2)                (3) +---+      +-+-+      +-+-+ +---+      +-+-+      +-+-+
 * |     |     |     |      |  3  |     |
 * 1    |  ->  |  2  |  1  |  ->  +-+  1  |  ->
 * |     |     |     |      |  2  |     |

(4)               (5)                (6) +-+-+      +-+-+      +-+-+ +-+-+  ->  |  4  + |  ->  |  5  |  2  | +-+-+      +-+-+      +-+-+
 * 4 |  2  |      |  5  |     |      |  6  |  3  |
 * |    |      +-+  2  |      +-+-+
 * 3 |  1  |      |  3  |  1  |      |  4  |  1  |
 * 3 |  1  |      |  3  |  1  |      |  4  |  1  |

fair.horizontal
Схема расположения окон в данном layout: (1)               (2)                (3) +---+      +---+      +-+-+ +---+      +---+      +-+-+
 * |     |     2     |      |  3  |  2  |
 * 1    |  ->  +---+  ->  +---+  ->
 * |     |     1     |      |     1     |

(4)               (5)                 (6) +-+-+      +---+---+---+      +---+---+---+ +-+-+  ->  +---+-+-+---+  ->  +---+---+---+ +-+-+      +--+--+--+--+      +---+---+---+
 * 4 |  3  |      | 5 | 4 | 3 |      | 6 | 5 | 4 |
 * 2 |  1  |      |  2  |  1  |      | 3 | 2 | 1 |

spiral
Схема расположения окон в данном layout: (1)               (2)                (3) +---+      +-+-+      +-+-+ +---+      +-+-+      +-+-+
 * |     |     |     |      |     |  2  |
 * 1    |  ->  |  2  |  1  |  ->  |  3  +-+  ->
 * |     |     |     |      |     |  1  |

(4)                   (5)                 (6) +---+---+      +---+---+      +---+---+ +---+---+---+      +---+---+---+      +---+---+---+
 * |  3   |      |       |   4   |      |       |   5   |
 * 4  +---+---+   -> |   5   +---+---+  ->  |   6   +-+-+---|
 * |  |   |      |       | 1 |   |      |       |2|1|   |
 * | 1 | 2 |     |       +---+ 3 |      |       +-+-+ 4 |
 * |  |   |      |       | 2 |   |      |       | 3 |   |
 * | 1 | 2 |     |       +---+ 3 |      |       +-+-+ 4 |
 * |  |   |      |       | 2 |   |      |       | 3 |   |

spiral.dwindle
Схема расположения окон в данном layout: (1)               (2)                (3) +---+      +-+-+      +-+-+ +---+      +-+-+      +-+-+
 * |     |     |     |      |     |  2  |
 * 1    |  ->  |  2  |  1  |  ->  |  3  +-+  ->
 * |     |     |     |      |     |  1  |

(4)                   (5)                 (6) +---+---+      +---+---+      +---+---+ +---+---+---+      +---+---+---+      +---+---+-+-+
 * |  3   |      |       |   4   |      |       |   5   |
 * 4  +---+---+   -> |   5   +---+---+  ->  |   6   +---+---|
 * |  |   |      |       |   | 2 |      |       |   | 3 |
 * | 2 | 1 |     |       | 3 +---+      |       | 4 +-+-+
 * |  |   |      |       |   | 1 |      |       |   |2|1|
 * | 2 | 1 |     |       | 3 +---+      |       | 4 +-+-+
 * |  |   |      |       |   | 1 |      |       |   |2|1|

max
В этой схеме окна занимают весь экран, за исключением панели.

max.fullscreen
В этой схеме окно занимает полностью весь экран, включая панели. Идеально подходит для просмотра видео.

magnifier
В этой схема 1 окно находится в мастер зоне (по центру экрана), все остальные располагаются под ним, расположенные стопкой. (1)               (2)                (3) +---+      +---+      +---+ +---+      +---+      +---+
 * |     |1  +---+   |      |2  +---+   |
 * 1    |  ->  |   | 2 |   |  ->  +---| 3 |---+  ->
 * |     |   +---+   |      |1  +---+   |

(4)                       (5)               +-+-+      +-+-+ +|         |+      |   |           |   | +|         |+      |2  |           |   | +-+-+      +---+
 * 3               |      |4                  |
 * 3               |      |4                  |
 * |   4    |    |      |3  |           |   |
 * 2 |        |    |   -> +---|     1     |---+
 * 1               |      |                   |
 * |     |1                  |
 * |     |1                  |

Настройка layout
Первое время пока вы будете изучать и подбирать схемы для себя, какой либо настройки не требуется. Но со временем, вы захотите, чтобы например, на 1м теге открывалась определенная схема, например для терминалов, а на 2м, открывался браузер, раскрытый во весь экран. Конечно можно каждый раз переключать схемы, но можно избежать муторной и повторяющейся настройки. Ведь мы используем Awesome, не для того, чтобы каждый раз повторять одни и те же действия, а чтобы нам действительно было удобно использовать систему.

Итак, открываем наш rc.lua, находим там секцию Tags, она начинается со строки. -- {{{ Tags -- Define a tag table which hold all screen tags. tags = {} for s = 1, screen.count do   tags[s] = awful.tag({1,2,3,4,5,6,7,8,9}, s, layout[1]) end Код приведенный выше используется по умолчанию в Awesome 3.4. Здесь мы можем видеть, что для всех тегов будет использоваться схема layout[1]. Смотртим в таблицу layout выше и видим, что по умолчанию для всех тегов будет использоваться схема awful.layout.suit.floating. Теперь для привязки схемы к конкретному тегу, нам нужно модифицировать код следующим образом: -- {{{ Tags -- Define a tag table which hold all screen tags. tags = { names = { "Main", "www", 3, 4, 5, 6, 7, 8, 9 }, layout={ layouts[2], layouts[10], layouts[10], layouts[10], layouts[1], layouts[2], layouts[1], layouts[1], layouts[11] }	} Обратите внимание, количество значений в таблице name{}, должно соответствовать количеству значений в таблице layout{}. Итак, для первого тега, который мы назвали "Main" в данном случае мы будем использовать layout[2] - awful.layout.suit.tile Для тега "www" мы используем layout[10] - awful.layout.suit.max, т.е. браузер у нас будет открываться на весь экран, за исключением панели. И так далее.

Расширение стандартных схем
После некоторого времени использования Awesome, иногда возникает некая неудовлетворенность существующими схемами(layout), для решения этой проблемы пользователи создали 2 библиотеки для их расширения.


 * Vain - изначально разрабатывался для Awesome 3.4, чуть позднее был портирован на 3.5 (разрабатывался одним пользователем под себя).


 * Lain - когда вышел Awesome 3.5, создатель Vain остался на старой версии и не стал портировать свою библиотеку на новую версию, конечно, со временем, это было сделано, но, сообщество решило на его основе сделать свою, новую и поддерживаемую версию, так была создана библиотека Lain. На сегодняшний день в нее добавлены виджеты и различные утилиты. Но работает она только на Awesome 3.5.