diff --git a/init.lua b/init.lua index e442005..4f25534 100644 --- a/init.lua +++ b/init.lua @@ -10,70 +10,76 @@ local function new(args) local mod = keys.mod or "Mod4" local mod_keysym = keys.mod_keysym or "Super_L" + local tmux = {} + tmux.left = function() + root.fake_input("key_release", "Left") + root.fake_input("key_press", "Left") + root.fake_input("key_release", "Left") + end + tmux.right = function() + root.fake_input("key_release", "Right") + root.fake_input("key_press", "Right") + root.fake_input("key_release", "Right") + end + tmux.up = function() + root.fake_input("key_release", "Up") + root.fake_input("key_press", "Up") + root.fake_input("key_release", "Up") + end + tmux.down = function() + root.fake_input("key_release", "Down") + root.fake_input("key_press", "Down") + root.fake_input("key_release", "Down") + end + tmux.navigate = function(dir) + keygrabber.stop() + root.fake_input("key_release", mod_keysym) + root.fake_input("key_press", "Control_L") + tmux[dir]() + root.fake_input("key_release", "Control_L") + root.fake_input("key_press", mod_keysym) + end + + local vim = {} + vim.left = function() + root.fake_input("key_release", "h") + root.fake_input("key_press", "h") + root.fake_input("key_release", "h") + end + vim.right = function() + root.fake_input("key_release", "l") + root.fake_input("key_press", "l") + root.fake_input("key_release", "l") + end + vim.up = function() + root.fake_input("key_release", "k") + root.fake_input("key_press", "k") + root.fake_input("key_release", "k") + end + vim.down = function() + root.fake_input("key_release", "j") + root.fake_input("key_press", "j") + root.fake_input("key_release", "j") + end + vim.navigate = function(dir) + keygrabber.stop() + root.fake_input("key_release", mod_keysym) + root.fake_input("key_release", "Control_L") + root.fake_input("key_press", "Control_L") + vim[dir]() + root.fake_input("key_release", "Control_L") + root.fake_input("key_press", mod_keysym) + end + local focus = function(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", mod_keysym) - 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", mod_keysym) + vim.navigate(dir) return else if string.find(client_name, "- TMUX$") then - keygrabber.stop() - root.fake_input("key_release", mod_keysym) - 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", mod_keysym) + tmux.navigate(dir) return else awful.client.focus.global_bydirection(dir) @@ -88,67 +94,12 @@ local function new(args) local pid = c and c.pid or -1 awful.spawn.easy_async("pstree -A -T " .. pid, function(out) if string.find(out, "[^.*\n]%-tmux: client") then - keygrabber.stop() - root.fake_input("key_release", mod_keysym) - 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", mod_keysym) + tmux.navigate(dir) return else if string.find(out, "[^.*\n]%-n?vim$") or string.find(out, "[^.*\n]%-n?vim%-") or string.find(out, "^gvim$") or string.find(out, "^gvim%-") then - keygrabber.stop() - root.fake_input("key_release", mod_keysym) - 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", mod_keysym) + vim.navigate(dir) return else awful.client.focus.global_bydirection(dir)