From d738d4937fbf6be0a301b4ace517c7fce9210a1c Mon Sep 17 00:00:00 2001 From: Noella <49508517+ItsNoellaHere@users.noreply.github.com> Date: Mon, 4 Mar 2024 20:05:40 -0700 Subject: [PATCH] Added bindings module --- bindings/client_buttons.lua | 28 +++++ bindings/client_keys.lua | 56 +++++++++ bindings/global_buttons.lua | 14 +++ bindings/global_keys.lua | 159 +++++++++++++++++++++++++ bindings/init.lua | 8 ++ main/signals.lua | 5 - rc.lua | 223 +----------------------------------- 7 files changed, 271 insertions(+), 222 deletions(-) create mode 100644 bindings/client_buttons.lua create mode 100644 bindings/client_keys.lua create mode 100644 bindings/global_buttons.lua create mode 100644 bindings/global_keys.lua create mode 100644 bindings/init.lua diff --git a/bindings/client_buttons.lua b/bindings/client_buttons.lua new file mode 100644 index 0000000..f4338d8 --- /dev/null +++ b/bindings/client_buttons.lua @@ -0,0 +1,28 @@ +local gears = require("gears") +local awful = require("awful") + +local _M = {} + +function _M.get() + local clientbuttons = gears.table.join( + awful.button({}, 1, function(c) + c:emit_signal("request::activate", "mouse_click", { raise = true }) + end), + awful.button({ RC.vars.modkey }, 1, function(c) + c:emit_signal("request::activate", "mouse_click", { raise = true }) + awful.mouse.client.move(c) + end), + awful.button({ RC.vars.modkey }, 3, function(c) + c:emit_signal("request::activate", "mouse_click", { raise = true }) + awful.mouse.client.resize(c) + end) + ) + + return clientbuttons +end + +return setmetatable({}, { + __call = function(_, ...) + return _M.get(...) + end, +}) diff --git a/bindings/client_keys.lua b/bindings/client_keys.lua new file mode 100644 index 0000000..867b7b3 --- /dev/null +++ b/bindings/client_keys.lua @@ -0,0 +1,56 @@ +local gears = require("gears") +local awful = require("awful") + +local _M = {} + +function _M.get() + local clientkeys = gears.table.join( + awful.key({ RC.vars.modkey }, "f", function(c) + c.fullscreen = not c.fullscreen + c:raise() + end, { description = "toggle fullscreen", group = "client" }), + awful.key({ RC.vars.modkey, "Shift" }, "c", function(c) + c:kill() + end, { description = "close", group = "client" }), + awful.key( + { RC.vars.modkey, "Control" }, + "space", + awful.client.floating.toggle, + { description = "toggle floating", group = "client" } + ), + awful.key({ RC.vars.modkey, "Control" }, "Return", function(c) + c:swap(awful.client.getmaster()) + end, { description = "move to master", group = "client" }), + awful.key({ RC.vars.modkey }, "o", function(c) + c:move_to_screen() + end, { description = "move to screen", group = "client" }), + awful.key({ RC.vars.modkey }, "t", function(c) + c.ontop = not c.ontop + end, { description = "toggle keep on top", group = "client" }), + awful.key({ RC.vars.modkey }, "n", function(c) + -- The client currently has the input focus, so it cannot be + -- minimized, since minimized clients can't have the focus. + c.minimized = true + end, { description = "minimize", group = "client" }), + awful.key({ RC.vars.modkey }, "m", function(c) + c.maximized = not c.maximized + c:raise() + end, { description = "(un)maximize", group = "client" }), + awful.key({ RC.vars.modkey, "Control" }, "m", function(c) + c.maximized_vertical = not c.maximized_vertical + c:raise() + end, { description = "(un)maximize vertically", group = "client" }), + awful.key({ RC.vars.modkey, "Shift" }, "m", function(c) + c.maximized_horizontal = not c.maximized_horizontal + c:raise() + end, { description = "(un)maximize horizontally", group = "client" }) + ) + + return clientkeys +end + +return setmetatable({}, { + __call = function(_, ...) + return _M.get(...) + end, +}) diff --git a/bindings/global_buttons.lua b/bindings/global_buttons.lua new file mode 100644 index 0000000..770fe2c --- /dev/null +++ b/bindings/global_buttons.lua @@ -0,0 +1,14 @@ +local gears = require("gears") +local awful = require("awful") + +local _M = {} + +function _M.get() + root.buttons(gears.table.join(awful.button({}, 4, awful.tag.viewnext), awful.button({}, 5, awful.tag.viewprev))) +end + +return setmetatable({}, { + __call = function(_, ...) + return _M.get(...) + end, +}) diff --git a/bindings/global_keys.lua b/bindings/global_keys.lua new file mode 100644 index 0000000..aea9845 --- /dev/null +++ b/bindings/global_keys.lua @@ -0,0 +1,159 @@ +local gears = require("gears") +local awful = require("awful") +local menubar = require("menubar") +local hotkeys_popup = require("awful.hotkeys_popup") + +local _M = {} + +function _M.get() + globalkeys = gears.table.join( + awful.key({ RC.vars.modkey }, "s", hotkeys_popup.show_help, { description = "show help", group = "awesome" }), + awful.key({ RC.vars.modkey }, "Left", awful.tag.viewprev, { description = "view previous", group = "tag" }), + awful.key({ RC.vars.modkey }, "Right", awful.tag.viewnext, { description = "view next", group = "tag" }), + awful.key({ RC.vars.modkey }, "Escape", awful.tag.history.restore, { description = "go back", group = "tag" }), + + awful.key({ RC.vars.modkey }, "j", function() + awful.client.focus.byidx(1) + end, { description = "focus next by index", group = "client" }), + awful.key({ RC.vars.modkey }, "k", function() + awful.client.focus.byidx(-1) + end, { description = "focus previous by index", group = "client" }), + + -- Layout manipulation + awful.key({ RC.vars.modkey, "Shift" }, "j", function() + awful.client.swap.byidx(1) + end, { description = "swap with next client by index", group = "client" }), + awful.key({ RC.vars.modkey, "Shift" }, "k", function() + awful.client.swap.byidx(-1) + end, { description = "swap with previous client by index", group = "client" }), + awful.key({ RC.vars.modkey, "Control" }, "j", function() + awful.screen.focus_relative(1) + end, { description = "focus the next screen", group = "screen" }), + awful.key({ RC.vars.modkey, "Control" }, "k", function() + awful.screen.focus_relative(-1) + end, { description = "focus the previous screen", group = "screen" }), + awful.key( + { RC.vars.modkey }, + "u", + awful.client.urgent.jumpto, + { description = "jump to urgent client", group = "client" } + ), + awful.key({ RC.vars.modkey }, "Tab", function() + awful.client.focus.history.previous() + if client.focus then + client.focus:raise() + end + end, { description = "go back", group = "client" }), + + -- Standard program + awful.key({ RC.vars.modkey }, "Return", function() + awful.spawn(RC.vars.terminal) + end, { description = "open a terminal", group = "launcher" }), + awful.key( + { RC.vars.modkey, "Control" }, + "r", + awesome.restart, + { description = "reload awesome", group = "awesome" } + ), + awful.key({ RC.vars.modkey, "Shift" }, "q", awesome.quit, { description = "quit awesome", group = "awesome" }), + + awful.key({ RC.vars.modkey }, "l", function() + awful.tag.incmwfact(0.05) + end, { description = "increase master width factor", group = "layout" }), + awful.key({ RC.vars.modkey }, "h", function() + awful.tag.incmwfact(-0.05) + end, { description = "decrease master width factor", group = "layout" }), + awful.key({ RC.vars.modkey, "Shift" }, "h", function() + awful.tag.incnmaster(1, nil, true) + end, { description = "increase the number of master clients", group = "layout" }), + awful.key({ RC.vars.modkey, "Shift" }, "l", function() + awful.tag.incnmaster(-1, nil, true) + end, { description = "decrease the number of master clients", group = "layout" }), + awful.key({ RC.vars.modkey, "Control" }, "h", function() + awful.tag.incncol(1, nil, true) + end, { description = "increase the number of columns", group = "layout" }), + awful.key({ RC.vars.modkey, "Control" }, "l", function() + awful.tag.incncol(-1, nil, true) + end, { description = "decrease the number of columns", group = "layout" }), + awful.key({ RC.vars.modkey }, "space", function() + awful.layout.inc(1) + end, { description = "select next", group = "layout" }), + awful.key({ RC.vars.modkey, "Shift" }, "space", function() + awful.layout.inc(-1) + end, { description = "select previous", group = "layout" }), + + awful.key({ RC.vars.modkey, "Control" }, "n", function() + local c = awful.client.restore() + -- Focus restored client + if c then + c:emit_signal("request::activate", "key.unminimize", { raise = true }) + end + end, { description = "restore minimized", group = "client" }), + + -- Prompt + awful.key({ RC.vars.modkey }, "r", function() + awful.screen.focused().mypromptbox:run() + end, { description = "run prompt", group = "launcher" }), + + awful.key({ RC.vars.modkey }, "x", function() + awful.prompt.run({ + prompt = "Run Lua code: ", + textbox = awful.screen.focused().mypromptbox.widget, + exe_callback = awful.util.eval, + history_path = awful.util.get_cache_dir() .. "/history_eval", + }) + end, { description = "lua execute prompt", group = "awesome" }), + -- Menubar + awful.key({ RC.vars.modkey }, "p", function() + menubar.show() + end, { description = "show the menubar", group = "launcher" }) + ) + + for i = 1, 6 do + globalkeys = gears.table.join( + globalkeys, + -- View tag only. + awful.key({ RC.vars.modkey }, "#" .. i + 9, function() + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + tag:view_only() + end + end, { description = "view tag #" .. i, group = "tag" }), + -- Toggle tag display. + awful.key({ RC.vars.modkey, "Control" }, "#" .. i + 9, function() + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + awful.tag.viewtoggle(tag) + end + end, { description = "toggle tag #" .. i, group = "tag" }), + -- Move client to tag. + awful.key({ RC.vars.modkey, "Shift" }, "#" .. i + 9, function() + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:move_to_tag(tag) + end + end + end, { description = "move focused client to tag #" .. i, group = "tag" }), + -- Toggle tag on focused client. + awful.key({ RC.vars.modkey, "Control", "Shift" }, "#" .. i + 9, function() + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:toggle_tag(tag) + end + end + end, { description = "toggle focused client on tag #" .. i, group = "tag" }) + ) + end + + return globalkeys +end + +return setmetatable({}, { + __call = function(_, ...) + return _M.get(...) + end, +}) diff --git a/bindings/init.lua b/bindings/init.lua new file mode 100644 index 0000000..962bca2 --- /dev/null +++ b/bindings/init.lua @@ -0,0 +1,8 @@ +local _M = { + global_buttons = require("bindings.global_buttons"), + client_buttons = require("bindings.client_buttons"), + global_keys = require("bindings.global_keys"), + client_keys = require("bindings.client_keys"), +} + +return _M diff --git a/main/signals.lua b/main/signals.lua index 3f2bd7e..5e2f6a0 100644 --- a/main/signals.lua +++ b/main/signals.lua @@ -55,11 +55,6 @@ client.connect_signal("request::titlebars", function(c) }) end) --- Enable sloppy focus, so that focus follows mouse. -client.connect_signal("mouse::enter", function(c) - c:emit_signal("request::activate", "mouse_enter", { raise = false }) -end) - client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) diff --git a/rc.lua b/rc.lua index e918dd2..11fcc83 100644 --- a/rc.lua +++ b/rc.lua @@ -6,11 +6,11 @@ local gears = require("gears") local awful = require("awful") local wibox = require("wibox") local beautiful = require("beautiful") -local menubar = require("menubar") -local hotkeys_popup = require("awful.hotkeys_popup") -local main = require("main") require("awful.autofocus") +local main = require("main") +local bindings = require("bindings") + beautiful.init(require("theme")) RC = {} @@ -125,14 +125,12 @@ awful.screen.connect_for_each_screen(function(s) layout = wibox.layout.align.horizontal, { -- Left widgets layout = wibox.layout.fixed.horizontal, - mylauncher, s.mytaglist, s.mypromptbox, }, s.mytasklist, -- Middle widget { -- Right widgets layout = wibox.layout.fixed.horizontal, - mykeyboardlayout, wibox.widget.systray(), mytextclock, s.mylayoutbox, @@ -141,216 +139,7 @@ awful.screen.connect_for_each_screen(function(s) end) -- }}} --- {{{ Mouse bindings -root.buttons(gears.table.join( - awful.button({}, 3, function() - mymainmenu:toggle() - end), - awful.button({}, 4, awful.tag.viewnext), - awful.button({}, 5, awful.tag.viewprev) -)) --- }}} - --- {{{ Key bindings -globalkeys = gears.table.join( - awful.key({ RC.vars.modkey }, "s", hotkeys_popup.show_help, { description = "show help", group = "awesome" }), - awful.key({ RC.vars.modkey }, "Left", awful.tag.viewprev, { description = "view previous", group = "tag" }), - awful.key({ RC.vars.modkey }, "Right", awful.tag.viewnext, { description = "view next", group = "tag" }), - awful.key({ RC.vars.modkey }, "Escape", awful.tag.history.restore, { description = "go back", group = "tag" }), - - awful.key({ RC.vars.modkey }, "j", function() - awful.client.focus.byidx(1) - end, { description = "focus next by index", group = "client" }), - awful.key({ RC.vars.modkey }, "k", function() - awful.client.focus.byidx(-1) - end, { description = "focus previous by index", group = "client" }), - - -- Layout manipulation - awful.key({ RC.vars.modkey, "Shift" }, "j", function() - awful.client.swap.byidx(1) - end, { description = "swap with next client by index", group = "client" }), - awful.key({ RC.vars.modkey, "Shift" }, "k", function() - awful.client.swap.byidx(-1) - end, { description = "swap with previous client by index", group = "client" }), - awful.key({ RC.vars.modkey, "Control" }, "j", function() - awful.screen.focus_relative(1) - end, { description = "focus the next screen", group = "screen" }), - awful.key({ RC.vars.modkey, "Control" }, "k", function() - awful.screen.focus_relative(-1) - end, { description = "focus the previous screen", group = "screen" }), - awful.key( - { RC.vars.modkey }, - "u", - awful.client.urgent.jumpto, - { description = "jump to urgent client", group = "client" } - ), - awful.key({ RC.vars.modkey }, "Tab", function() - awful.client.focus.history.previous() - if client.focus then - client.focus:raise() - end - end, { description = "go back", group = "client" }), - - -- Standard program - awful.key({ RC.vars.modkey }, "Return", function() - awful.spawn(RC.vars.terminal) - end, { description = "open a terminal", group = "launcher" }), - awful.key({ RC.vars.modkey, "Control" }, "r", awesome.restart, { description = "reload awesome", group = "awesome" }), - awful.key({ RC.vars.modkey, "Shift" }, "q", awesome.quit, { description = "quit awesome", group = "awesome" }), - - awful.key({ RC.vars.modkey }, "l", function() - awful.tag.incmwfact(0.05) - end, { description = "increase master width factor", group = "layout" }), - awful.key({ RC.vars.modkey }, "h", function() - awful.tag.incmwfact(-0.05) - end, { description = "decrease master width factor", group = "layout" }), - awful.key({ RC.vars.modkey, "Shift" }, "h", function() - awful.tag.incnmaster(1, nil, true) - end, { description = "increase the number of master clients", group = "layout" }), - awful.key({ RC.vars.modkey, "Shift" }, "l", function() - awful.tag.incnmaster(-1, nil, true) - end, { description = "decrease the number of master clients", group = "layout" }), - awful.key({ RC.vars.modkey, "Control" }, "h", function() - awful.tag.incncol(1, nil, true) - end, { description = "increase the number of columns", group = "layout" }), - awful.key({ RC.vars.modkey, "Control" }, "l", function() - awful.tag.incncol(-1, nil, true) - end, { description = "decrease the number of columns", group = "layout" }), - awful.key({ RC.vars.modkey }, "space", function() - awful.layout.inc(1) - end, { description = "select next", group = "layout" }), - awful.key({ RC.vars.modkey, "Shift" }, "space", function() - awful.layout.inc(-1) - end, { description = "select previous", group = "layout" }), - - awful.key({ RC.vars.modkey, "Control" }, "n", function() - local c = awful.client.restore() - -- Focus restored client - if c then - c:emit_signal("request::activate", "key.unminimize", { raise = true }) - end - end, { description = "restore minimized", group = "client" }), - - -- Prompt - awful.key({ RC.vars.modkey }, "r", function() - awful.screen.focused().mypromptbox:run() - end, { description = "run prompt", group = "launcher" }), - - awful.key({ RC.vars.modkey }, "x", function() - awful.prompt.run({ - prompt = "Run Lua code: ", - textbox = awful.screen.focused().mypromptbox.widget, - exe_callback = awful.util.eval, - history_path = awful.util.get_cache_dir() .. "/history_eval", - }) - end, { description = "lua execute prompt", group = "awesome" }), - -- Menubar - awful.key({ RC.vars.modkey }, "p", function() - menubar.show() - end, { description = "show the menubar", group = "launcher" }) -) - -clientkeys = gears.table.join( - awful.key({ RC.vars.modkey }, "f", function(c) - c.fullscreen = not c.fullscreen - c:raise() - end, { description = "toggle fullscreen", group = "client" }), - awful.key({ RC.vars.modkey, "Shift" }, "c", function(c) - c:kill() - end, { description = "close", group = "client" }), - awful.key( - { RC.vars.modkey, "Control" }, - "space", - awful.client.floating.toggle, - { description = "toggle floating", group = "client" } - ), - awful.key({ RC.vars.modkey, "Control" }, "Return", function(c) - c:swap(awful.client.getmaster()) - end, { description = "move to master", group = "client" }), - awful.key({ RC.vars.modkey }, "o", function(c) - c:move_to_screen() - end, { description = "move to screen", group = "client" }), - awful.key({ RC.vars.modkey }, "t", function(c) - c.ontop = not c.ontop - end, { description = "toggle keep on top", group = "client" }), - awful.key({ RC.vars.modkey }, "n", function(c) - -- The client currently has the input focus, so it cannot be - -- minimized, since minimized clients can't have the focus. - c.minimized = true - end, { description = "minimize", group = "client" }), - awful.key({ RC.vars.modkey }, "m", function(c) - c.maximized = not c.maximized - c:raise() - end, { description = "(un)maximize", group = "client" }), - awful.key({ RC.vars.modkey, "Control" }, "m", function(c) - c.maximized_vertical = not c.maximized_vertical - c:raise() - end, { description = "(un)maximize vertically", group = "client" }), - awful.key({ RC.vars.modkey, "Shift" }, "m", function(c) - c.maximized_horizontal = not c.maximized_horizontal - c:raise() - end, { description = "(un)maximize horizontally", group = "client" }) -) - --- Bind all key numbers to tags. --- Be careful: we use keycodes to make it work on any keyboard layout. --- This should map on the top row of your keyboard, usually 1 to 9. -for i = 1, 9 do - globalkeys = gears.table.join( - globalkeys, - -- View tag only. - awful.key({ RC.vars.modkey }, "#" .. i + 9, function() - local screen = awful.screen.focused() - local tag = screen.tags[i] - if tag then - tag:view_only() - end - end, { description = "view tag #" .. i, group = "tag" }), - -- Toggle tag display. - awful.key({ RC.vars.modkey, "Control" }, "#" .. i + 9, function() - local screen = awful.screen.focused() - local tag = screen.tags[i] - if tag then - awful.tag.viewtoggle(tag) - end - end, { description = "toggle tag #" .. i, group = "tag" }), - -- Move client to tag. - awful.key({ RC.vars.modkey, "Shift" }, "#" .. i + 9, function() - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then - client.focus:move_to_tag(tag) - end - end - end, { description = "move focused client to tag #" .. i, group = "tag" }), - -- Toggle tag on focused client. - awful.key({ RC.vars.modkey, "Control", "Shift" }, "#" .. i + 9, function() - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then - client.focus:toggle_tag(tag) - end - end - end, { description = "toggle focused client on tag #" .. i, group = "tag" }) - ) -end - -clientbuttons = gears.table.join( - awful.button({}, 1, function(c) - c:emit_signal("request::activate", "mouse_click", { raise = true }) - end), - awful.button({ RC.vars.modkey }, 1, function(c) - c:emit_signal("request::activate", "mouse_click", { raise = true }) - awful.mouse.client.move(c) - end), - awful.button({ RC.vars.modkey }, 3, function(c) - c:emit_signal("request::activate", "mouse_click", { raise = true }) - awful.mouse.client.resize(c) - end) -) - -- Set keys -root.keys(globalkeys) --- }}} - -awful.rules.rules = main.rules(clientkeys, clientbuttons) +root.buttons(bindings.global_buttons()) +root.keys(bindings.global_keys()) +awful.rules.rules = main.rules(bindings.client_keys(), bindings.client_buttons())