Помогите допилить управлялку расположения и геометрии клиентов с клавиатуры
Год и два года назад как-то поднимал уже эту тему, но не срослось.
Демка гифка, чтобы не читать много текста ниже: http://i.imgur.com/cpKRBXM.gif
Подробнее: управлять размещением клиента, а именно размещать его по частям текущего дисплея при этом подгоняя его геометрию.
Например: есть фокус-клиент, я нажимаю на mod4 + 9 на нампаде, т.е. верхнюю правую кнопку (KP_Prior), что означает, что клиент должен переместиться в верхний правый угол текущего дисплея и иметь геометрию четверти дисплея:
+---------------------+ +---------------------+ +---------------------+ | +---------+ | | +-----------------+ | | +---------+ | | | 7 | | | | 8 | | | | 9 | | | | | | | | | | | | | | | +---------+ | | +-----------------+ | | +---------+ | | | | | | | | | | | | | | | | | | | | | | | | | +---------------------+ +---------------------+ +---------------------+ +---------------------+ +---------------------+ +---------------------+ | +---------+ | | +-----------------+ | | +---------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | 4 | | | | 5 | | | | 6 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------+ | | +-----------------+ | | +---------+ | +---------------------+ +---------------------+ +---------------------+ +---------------------+ +---------------------+ +---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | +---------+ | | +-----------------+ | | +---------+ | | | 1 | | | | 2 | | | | 3 | | | | | | | | | | | | | | | +---------+ | | +-----------------+ | | +---------+ | +---------------------+ +---------------------+ +---------------------+Управление кнопками нампада в целом такое (расположение / геометрия), mod4+:
-
1
— левый нижний угол / пол длины / пол высоты -
2
— нижняя часть / вся длина / пол высоты -
3
— правый нижний угол / пол длины / пол высоты -
4
— левая часть / пол длины / вся высота -
5
— максимизация (типа mod4+M, но без переключения режима floating) -
6
— правая часть / пол длины / вся высота -
7
— левый верхний угол / пол длины / пол высоты -
8
— верхняя часть / вся длина / пол высоты -
9
— верхний правый угол / пол длины / пол высоты
Для одно-мониторной конфигурации я запилил уже давно:
local wa = screen[mouse.screen].workarea -- текущий screen
local ph = 22 -- высота панели
local ww = wa.width -- длина текущего screen
local wh = wa.height -- высота текущего screen
clientkeys = awful.util.table.join(
awful.key({modkey}, "KP_Left", function (c) c:geometry( { width = ww / 2, height = wh, x = 0, y = ph } ) end),
awful.key({modkey}, "KP_Right", function (c) c:geometry( { width = ww / 2, height = wh, x = ww / 2, y = ph } ) end),
awful.key({modkey}, "KP_Up", function (c) c:geometry( { width = ww, height = wh / 2, x = 0, y = ph } ) end),
awful.key({modkey}, "KP_Down", function (c) c:geometry( { width = ww, height = wh / 2, x = 0, y = wh / 2 + ph } ) end),
awful.key({modkey}, "KP_Prior", function (c) c:geometry( { width = ww / 2, height = wh / 2, x = ww / 2, y = ph } ) end),
awful.key({modkey}, "KP_Next", function (c) c:geometry( { width = ww / 2, height = wh / 2, x = ww / 2, y = wh / 2 + ph } ) end),
awful.key({modkey}, "KP_Home", function (c) c:geometry( { width = ww / 2, height = wh / 2, x = 0, y = ph } ) end),
awful.key({modkey}, "KP_End", function (c) c:geometry( { width = ww / 2, height = wh / 2, x = 0, y = wh / 2 + ph } ) end),
awful.key({modkey}, "KP_Begin", function (c) c:geometry( { width = ww, height = wh, x = 0, y = ph } ) end),
)
sudo cast actionless, Worron, fjfalcon, zhuravlik, Faiver, r3lgar; (простие, если вы бог осома, а я вас запамятовал).
Спасибо.