Modal Keybindings/ru

Идея модальных сочетаний клавиш, заключается в том, что некоторые клавиши выполняют различные функции в зависимости от установленного режима 'mode'. В моих настройках, у меня есть клиентский 'mode' (активирующийся нажатием ), и 'no-mode' (поведение по умолчанию), где 'x' разворачивает приложение в клиентском режиме и не делает ничего если установлен режим 'no-mode'. Awesome's Keygrabber API делает невероятно простой реализацию модальных клавиш. В общем, вы вызываете keygrabber для некоторых клавиатурных сочетаний, которые затем отслеживаются на нажатие и вызываются соответсвующие функции.

1. Итак у вас есть таблица, которая связывает определнные клавиши с действиями для этого режима: -- таблица соответсвия модальным приложениям клавиатурных сочетаний client_mode = { -- Устанавливаем приложение поверх всех o = function (c) c.ontop = not c.ontop end, -- Перерисовка приложения d = function (c) c:redraw end, -- Переключение плавающего (floating) статуса для приложения u = awful.client.floating.toggle, -- toggle mark t = awful.client.togglemarked, -- полноэкранный режим для приложения f = function (c) c.fullscreen = not c.fullscreen end, -- разворачивание на экран(maximize) приложения x = function (c) c.maximized_horizontal = not c.maximized_horizontal c.maximized_vertical  = not c.maximized_vertical end }

2. И клавиатурные сочетания которые вызывают режим. Следующие привязки должны располагаться в секции  table:

-- trigger client mode on Mod4 + space awful.key({ modkey }, "space", function(c)     keygrabber.run(function(mod, key, event) if event == "release" then return true end keygrabber.stop if client_mode[key] then client_mode[key](c) end return true end) end)

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