From 5b2c6e679986f9360f12fa4071b7f2c62d164e3d Mon Sep 17 00:00:00 2001 From: BZ Date: Tue, 9 Mar 2021 12:14:14 +0100 Subject: [PATCH] use local capi instead of global this improves performance drastically. --- init.lua | 197 +++++++++++++++++++++++++------------------------------ 1 file changed, 88 insertions(+), 109 deletions(-) diff --git a/init.lua b/init.lua index b21175b..c72f1d2 100644 --- a/init.lua +++ b/init.lua @@ -1,122 +1,101 @@ -local capi = { - root = root, - screen = screen, - client = client, - keygrabber = keygrabber -} - +local capi = {root = root, screen = screen, client = client, keygrabber = keygrabber} local awful = require("awful") local glib = require("lgi").GLib local unpack = unpack or table.unpack -- luacheck: globals unpack (compatibility with Lua 5.1) local module = {} -local keys = { - up = { "k" }, - down = { "j" }, - left = { "h" }, - right = { "l" } -} +local keys = {up = {"k"}, down = {"j"}, left = {"h"}, right = {"l"}} local function new(ks) - keys = ks or keys - local aw = {} + keys = ks or keys + local aw = {} - glib.idle_add(glib.PRIORITY_DEFAULT_IDLE, function() - for k, v in pairs(keys) do - for _, key_name in ipairs(v) do - aw[#aw + 1] = awful.key( - { "Mod4" }, - key_name, - function() - module.focus(k) - end, - { - description = "Change focus to the " .. key_name .. " window", - group = "Navigator" - } - ) - end - end - capi.root.keys(awful.util.table.join(capi.root.keys(), unpack(aw))) - end) - return module + glib.idle_add(glib.PRIORITY_DEFAULT_IDLE, function() + for k, v in pairs(keys) do + for _, key_name in ipairs(v) do + aw[#aw + 1] = awful.key({"Mod4"}, key_name, function() + module.focus(k) + end, {description = "focus " .. key_name .. " window", group = "client"}) + end + end + capi.root.keys(awful.util.table.join(capi.root.keys(), unpack(aw))) + end) + return module end function module.focus(dir) - local c = client.focus - - local client_name = c and c.name or "" - - if string.find(client_name, "- N?VIM$") then - keygrabber.stop() - root.fake_input("key_release", "Super_L") - root.fake_input("key_release", "Control_L") - root.fake_input("key_press", "Control_L") - - if dir == "left" then - root.fake_input("key_release", "h") - root.fake_input("key_press", "h") - root.fake_input("key_release", "h") - else - if dir == "right" then - root.fake_input("key_release", "l") - root.fake_input("key_press", "l") - root.fake_input("key_release", "l") - else - if dir == "up" then - root.fake_input("key_release", "k") - root.fake_input("key_press", "k") - root.fake_input("key_release", "k") - else - if dir == "down" then - root.fake_input("key_release", "j") - root.fake_input("key_press", "j") - root.fake_input("key_release", "j") - end - end - end - end - root.fake_input("key_release", "Control_L") - root.fake_input("key_press", "Super_L") - return - else - if string.find(client_name, "- TMUX$") then - keygrabber.stop() - root.fake_input("key_release", "Super_L") - root.fake_input("key_press", "Control_L") - - if dir == "left" then - root.fake_input("key_release", "Left") - root.fake_input("key_press", "Left") - root.fake_input("key_release", "Left") - else - if dir == "right" then - root.fake_input("key_release", "Right") - root.fake_input("key_press", "Right") - root.fake_input("key_release", "Right") - else - if dir == "up" then - root.fake_input("key_release", "Up") - root.fake_input("key_press", "Up") - root.fake_input("key_release", "Up") - else - if dir == "down" then - root.fake_input("key_release", "Down") - root.fake_input("key_press", "Down") - root.fake_input("key_release", "Down") - end - end - end - end - root.fake_input("key_release", "Control_L") - root.fake_input("key_press", "Super_L") - return - else - awful.client.focus.global_bydirection(dir) - end - end + local c = capi.client.focus + local client_name = c and c.name or "" + if string.find(client_name, "- N?VIM$") then + capi.keygrabber.stop() + capi.root.fake_input("key_release", "Super_L") + capi.root.fake_input("key_release", "Control_L") + capi.root.fake_input("key_press", "Control_L") + if dir == "left" then + capi.root.fake_input("key_release", "h") + capi.root.fake_input("key_press", "h") + capi.root.fake_input("key_release", "h") + else + if dir == "right" then + capi.root.fake_input("key_release", "l") + capi.root.fake_input("key_press", "l") + capi.root.fake_input("key_release", "l") + else + if dir == "up" then + capi.root.fake_input("key_release", "k") + capi.root.fake_input("key_press", "k") + capi.root.fake_input("key_release", "k") + else + if dir == "down" then + capi.root.fake_input("key_release", "j") + capi.root.fake_input("key_press", "j") + capi.root.fake_input("key_release", "j") + end + end + end + end + capi.root.fake_input("key_release", "Control_L") + capi.root.fake_input("key_press", "Super_L") + return + else + if string.find(client_name, "- TMUX$") then + capi.keygrabber.stop() + capi.root.fake_input("key_release", "Super_L") + capi.root.fake_input("key_press", "Control_L") + if dir == "left" then + capi.root.fake_input("key_release", "Left") + capi.root.fake_input("key_press", "Left") + capi.root.fake_input("key_release", "Left") + else + if dir == "right" then + capi.root.fake_input("key_release", "Right") + capi.root.fake_input("key_press", "Right") + capi.root.fake_input("key_release", "Right") + else + if dir == "up" then + capi.root.fake_input("key_release", "Up") + capi.root.fake_input("key_press", "Up") + capi.root.fake_input("key_release", "Up") + else + if dir == "down" then + capi.root.fake_input("key_release", "Down") + capi.root.fake_input("key_press", "Down") + capi.root.fake_input("key_release", "Down") + end + end + end + end + capi.root.fake_input("key_release", "Control_L") + capi.root.fake_input("key_press", "Super_L") + return + else + awful.client.focus.global_bydirection(dir) + end + end end -return setmetatable(module, { __call = function(_, ...) - return new(...) -end }) +return setmetatable(module, { + __call = function(_, ...) + return new(...) + end +})