diff --git a/README.md b/README.md
index 2b2523b..a59d8c3 100644
--- a/README.md
+++ b/README.md
@@ -27,16 +27,23 @@ git clone https://github.com/intrntbrn/awesomewm-vim-tmux-navigator ~/.config/aw
```
It's not recommended to change the path since it's hardcoded in other configuration files.
-Add your preferred navigation (focus) keybinds to `rc.lua` (e.g. Mod4+arrow or Mod4+hjkl)
+Add your preferred navigation (focus) keybinds to `rc.lua` (e.g. Mod4+arrows or Mod4+hjkl)
```
-require("awesomewm-vim-tmux-navigator"){
- up = {"Up", "k"},
- down = {"Down", "j"},
- left = {"Left", "h"},
- right = {"Right", "l"},
- }
+require("awesomewm-vim-tmux-navigator") {
+ up = {"Up", "k"},
+ down = {"Down", "j"},
+ left = {"Left", "h"},
+ right = {"Right", "l"},
+ mod = "Mod4",
+ mod_keysym = "Super_L"
+}
```
+
+Please verify that `mod` and `mod_keysym` matches your actual awesomewm modifier key by using the terminal application `xev`.
+For instance you might be using the right windows/super key and have to specify "Super_R" as your `mod_keysym`, or "Mod1" and "Alt_L" if you prefer to use the alt key.
+
+
Remove conflicting keybinds from your `rc.lua`.
### Vim
diff --git a/init.lua b/init.lua
index c72f1d2..2f3a48d 100644
--- a/init.lua
+++ b/init.lua
@@ -1,97 +1,101 @@
-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 unpack = unpack or table.unpack -- luacheck: globals unpack
local module = {}
-local keys = {up = {"k"}, down = {"j"}, left = {"h"}, right = {"l"}}
+local function new(args)
+ local client, root, keygrabber = client, root, keygrabber -- luacheck: globals client root keygrabber
+ local keys = args or {up = {"k", "Up"}, down = {"j", "Down"}, left = {"h", "Left"}, right = {"l", "Right"}}
-local function new(ks)
- keys = ks or keys
- local aw = {}
+ local mod = keys.mod or "Mod4"
+ local mod_keysym = keys.mod_keysym or "Super_L"
- 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 = 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")
+ 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
- capi.root.fake_input("key_release", "Left")
- capi.root.fake_input("key_press", "Left")
- capi.root.fake_input("key_release", "Left")
+ root.fake_input("key_release", "h")
+ root.fake_input("key_press", "h")
+ root.fake_input("key_release", "h")
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")
+ root.fake_input("key_release", "l")
+ root.fake_input("key_press", "l")
+ root.fake_input("key_release", "l")
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")
+ root.fake_input("key_release", "k")
+ root.fake_input("key_press", "k")
+ root.fake_input("key_release", "k")
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")
+ root.fake_input("key_release", "j")
+ root.fake_input("key_press", "j")
+ 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")
+ root.fake_input("key_release", "Control_L")
+ root.fake_input("key_press", mod_keysym)
return
else
- awful.client.focus.global_bydirection(dir)
+ 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)
+ return
+ else
+ awful.client.focus.global_bydirection(dir)
+ end
end
end
+
+ keys.mod = nil
+ keys.mod_keysym = nil
+
+ 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({mod}, key_name, function()
+ focus(k)
+ end, {description = "focus " .. k .. " window", group = "client"})
+ end
+ end
+ root.keys(awful.util.table.join(root.keys(), unpack(aw)))
+ end)
+ return module
end
return setmetatable(module, {