From 97b844e6fdbe9e5dc7c7f8d6fa48d393be11c7d1 Mon Sep 17 00:00:00 2001 From: crater2150 Date: Fri, 25 Apr 2014 15:13:31 +0200 Subject: [PATCH] Refactor keybinding code --- bindings.lua | 81 +++++++++++++++++++++++---------------------------- layouts.lua | 6 +--- modalbind.lua | 33 ++++++++++++--------- rc.lua | 6 ++-- tags.lua | 26 +++++++++++------ 5 files changed, 78 insertions(+), 74 deletions(-) diff --git a/bindings.lua b/bindings.lua index a978c2b..5605ddc 100644 --- a/bindings.lua +++ b/bindings.lua @@ -7,75 +7,69 @@ local scratch = require("scratch") local modkey = conf.modkey or "Mod4" local mb = require("modalbind") -local bindings = {mb = mb} +local bindings = {modalbind = mb} -- {{{ Mouse bindings root.buttons(awful.util.table.join( -awful.button({ }, 4, awful.tag.viewnext), -awful.button({ }, 5, awful.tag.viewprev) + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) )) -- }}} local function spawnf(cmd) return function() awful.util.spawn(cmd) end end +bindings.spawnf = spawnf conf.cmd.run = conf.cmd.run or spawnf("dmenu_run") mpdmap = { - name = "MPD", - m = mpd.ctrl.toggle, - n = mpd.ctrl.next, - N = mpd.ctrl.prev, - s = spawnf("mpd"), - S = spawnf("mpd --kill"), - g = spawnf(conf.cmd.mpd_client) + m = { func = mpd.ctrl.toggle, desc = "Toggle" }, + n = { func = mpd.ctrl.next, desc = "Next" }, + N = { func = mpd.ctrl.prev, desc = "Prev" }, + s = { func = spawnf("mpd"), desc = "start MPD" }, + S = { func = spawnf("mpd --kill"), desc = "kill MPD" }, + g = { func = spawnf(conf.cmd.mpd_client), desc = "Gmpc" } } mpdpromts = { - name = "MPD PROMPTS", - a = mpd.prompt.artist, - b = mpd.prompt.album, - t = mpd.prompt.title, - r = mpd.prompt.toggle_replace_on_search + a = { func = mpd.prompt.artist, desc = "artist" }, + b = { func = mpd.prompt.album, desc = "album" }, + t = { func = mpd.prompt.title, desc = "title" }, + r = { func = mpd.prompt.toggle_replace_on_search, desc = "toggle replacing" } } progmap = { - name = "PROGRAMS", - f = spawnf(conf.cmd.browser), - i = spawnf(conf.cmd.im_client), - I = spawnf(conf.cmd.irc_client), - m = spawnf(conf.cmd.mail_client) + f = { func = spawnf(conf.cmd.browser), desc = "Browser" }, + i = { func = spawnf(conf.cmd.im_client), desc = "IM Client" }, + I = { func = spawnf(conf.cmd.irc_client), desc = "IRC" }, + m = { func = spawnf(conf.cmd.mail_client), desc = "Mail" } } docmap = { - name = "DOCUMENTS", - u = spawnf("docopen ~/uni pdf"), - b = spawnf("docopen ~/books pdf epub mobi txt lit html htm"), + u = { func = spawnf("docopen ~/uni pdf"), desc = "Uni-Dokumente" }, + b = { func = spawnf("docopen ~/books pdf epub mobi txt lit html htm"), desc = "Bücher" } } adapters = { u = "wwan", w = "wlan", b = "bluetooth" } -function rfkill(cmd) - map={ name = string.upper(cmd) } +local function rfkill(cmd) + map = {} for key, adapter in pairs(adapters) do - map[key] = spawnf("sudo rfkill "..cmd.." "..adapter) + map[key] = { func = spawnf("sudo rfkill "..cmd.." "..adapter), desc = adapter } end return map end connectmap = { - name = "CONNECT", - u = spawnf("umts"), - w = spawnf("wlanacpi") + u = { func = spawnf("umts"), desc = "umts" }, + w = { func = spawnf("wlanacpi"), desc = "wlan" } } wirelessmap = { - name = "WIRELESS", - b = mb.grabf(rfkill("block")), - u = mb.grabf(rfkill("unblock")), - c = mb.grabf(connectmap) + b = { func = mb.grabf(rfkill("block"),"Block"), desc = "block" }, + u = { func = mb.grabf(rfkill("unblock"),"Unblock"), desc = "unblock" }, + c = { func = mb.grabf(connectmap, "Connect"), desc = "connect" } } -function bindings.extend_and_register_key_table(globalkeys) - local totalkeys = globalkeys or {} - totalkeys = awful.util.table.join(totalkeys, +function bindings.extend_key_table(globalkeys) + return awful.util.table.join(globalkeys or {}, awful.key({ }, "Menu", spawnf('wmselect')), awful.key({ modkey, "Control" }, "r", awesome.restart), @@ -84,11 +78,11 @@ function bindings.extend_and_register_key_table(globalkeys) --{{{ Modal mappings - awful.key({ modkey }, "m", mb.grabf(mpdmap, true)), - awful.key({ modkey, "Shift" }, "m", mb.grabf(mpdpromts)), - awful.key({ modkey }, "c", mb.grabf(progmap)), - awful.key({ modkey }, "w", mb.grabf(wirelessmap)), - awful.key({ modkey }, "d", mb.grabf(docmap)), + awful.key({ modkey }, "m", mb.grabf(mpdmap, "MPD", true)), + awful.key({ modkey, "Shift" }, "m", mb.grabf(mpdpromts, "MPD - Search for")), + awful.key({ modkey }, "c", mb.grabf(progmap, "Commands")), + awful.key({ modkey }, "w", mb.grabf(wirelessmap, "Wifi")), + awful.key({ modkey }, "d", mb.grabf(docmap, "Documents")), --}}} --{{{ Audio control @@ -130,13 +124,10 @@ function bindings.extend_and_register_key_table(globalkeys) ) --}}} - - -- Set keys - root.keys(totalkeys) end -function client_opacity_set(c, default, max, step) +local function client_opacity_set(c, default, max, step) if c.opacity < 0 or c.opacity > 1 then c.opacity = default end diff --git a/layouts.lua b/layouts.lua index 7bf2a52..7308f0b 100644 --- a/layouts.lua +++ b/layouts.lua @@ -30,7 +30,6 @@ function layouts.extend_key_table(globalkeys) end), -- Layout manipulation - awful.key({ modkey }, "u", awful.client.urgent.jumpto), awful.key({ modkey }, "Tab", function () awful.client.focus.history.previous() if client.focus then @@ -78,10 +77,7 @@ function layouts.extend_key_table(globalkeys) end), awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) - end), - awful.key({ modkey }, "Left", awful.tag.viewprev ), - awful.key({ modkey }, "Right", awful.tag.viewnext ), - awful.key({ modkey }, "Escape", awful.tag.history.restore) + end) ); end diff --git a/modalbind.lua b/modalbind.lua index aef2c71..bcaa904 100644 --- a/modalbind.lua +++ b/modalbind.lua @@ -105,7 +105,7 @@ local function set_default(s) modewibox[s].x = settings.x_offset < 0 and screen[s].geometry.x - width + settings.x_offset or settings.x_offset - modewibox[s].y = screen[s].geometry.height - settings.height + modewibox[s].y = screen[s].geometry.height - modewibox[s].height end local function ensure_init() @@ -115,7 +115,7 @@ local function ensure_init() inited = true for s = 1, screen.count() do modewidget[s] = wibox.widget.textbox() - modewidget[s]:set_align("center") + modewidget[s]:set_align("left") modewibox[s] = wibox({ fg = beautiful.fg_normal, @@ -141,16 +141,19 @@ local function ensure_init() end end -local function show_box(s, map) +local function show_box(s, map, name) ensure_init() modewibox.screen = s - local label = " -- " .. map.name .. " -- " + local label = "" .. name .. "" if settings.show_options then - for key in pairs(map) do - if key ~= "name" then label = label .. " " .. key end + for key, mapping in pairs(map) do + label = label .. "\n" .. key .. "" + if type(mapping) == "table" then + label = label .. "\t" .. (mapping.desc or "???") + end end end - modewidget[s]:set_text(label) + modewidget[s]:set_markup(label) modewibox[s].visible = true set_default(s) end @@ -160,9 +163,9 @@ local function hide_box() if s ~= -1 then modewibox[s].visible = false end end -function grab(keymap, stay_in_mode) - if keymap.name then - show_box(mouse.screen, keymap) +function grab(keymap, name, stay_in_mode) + if name then + show_box(mouse.screen, keymap, name) nesting = nesting + 1 end @@ -178,7 +181,11 @@ function grab(keymap, stay_in_mode) if keymap[key] then keygrabber.stop() - keymap[key]() + if type(keymap[key]) == "table" then + keymap[key].func() + else + keymap[key]() + end if stay_in_mode then grab(keymap, true) else @@ -193,8 +200,8 @@ function grab(keymap, stay_in_mode) end modalbind.grab = grab -function grabf(keymap, stay_in_mode) - return function() grab(keymap, stay_in_mode) end +function grabf(keymap, name, stay_in_mode) + return function() grab(keymap, name, stay_in_mode) end end modalbind.grabf = grabf diff --git a/rc.lua b/rc.lua index 0e1fe34..0efea95 100644 --- a/rc.lua +++ b/rc.lua @@ -64,8 +64,10 @@ globalkeys = layouts.extend_key_table(globalkeys); globalkeys = tags.extend_key_table(globalkeys); bindings = require("bindings") -bindings.extend_and_register_key_table(globalkeys) -bindings.mb.set_x_offset(18) +bindings.modalbind.set_x_offset(18) +globalkeys = bindings.extend_key_table(globalkeys) + +root.keys(globalkeys) -- }}} -- {{{ rules diff --git a/tags.lua b/tags.lua index d6a8d37..fe1c144 100644 --- a/tags.lua +++ b/tags.lua @@ -1,4 +1,4 @@ --- tags and layouts +-- tags local awful = awful local conf = conf local modkey = conf.modkey or "Mod4" @@ -6,7 +6,7 @@ local modkey = conf.modkey or "Mod4" local tags={ mt={} } local layouts = layouts -local function funcViewOnly(i) +local function getfunc_viewonly(i) return function () local screen = mouse.screen if tags[screen][i] then @@ -15,7 +15,7 @@ local function funcViewOnly(i) end end -local function funcViewToggle(i) +local function getfunc_viewtoggle(i) return function () local screen = mouse.screen if tags[screen][i] then @@ -24,7 +24,7 @@ local function funcViewToggle(i) end end -local function funcMoveTo(i) +local function getfunc_moveto(i) return function () if client.focus and tags[client.focus.screen][i] then awful.client.movetotag(tags[client.focus.screen][i]) @@ -32,7 +32,7 @@ local function funcMoveTo(i) end end -local function funcToggle(i) +local function getfunc_clienttoggle(i) return function () if client.focus and tags[client.focus.screen][i] then awful.client.toggletag(tags[client.focus.screen][i]) @@ -104,12 +104,20 @@ function tags.extend_key_table(globalkeys) k = "F" .. i - 10 -- F keys end tagkeys = awful.util.table.join(tagkeys, - awful.key( { modkey }, k, funcViewOnly(i)), - awful.key( { modkey, "Control" }, k, funcViewToggle(i)), - awful.key( { modkey, "Shift" }, k, funcMoveTo(i)), - awful.key( { modkey, "Control", "Shift" }, k, funcToggle(i)) + awful.key( { modkey }, k, getfunc_viewonly(i)), + awful.key( { modkey, "Control" }, k, getfunc_viewtoggle(i)), + awful.key( { modkey, "Shift" }, k, getfunc_moveto(i)), + awful.key( { modkey, "Control", "Shift" }, k, getfunc_clienttoggle(i)) ) end + + -- keys for all tags + tagkeys = awful.util.table.join(tagkeys, + awful.key({ modkey }, "u", awful.client.urgent.jumpto), + awful.key({ modkey }, "Left", awful.tag.viewprev ), + awful.key({ modkey }, "Right", awful.tag.viewnext ), + awful.key({ modkey }, "Escape", awful.tag.history.restore) + ) return tagkeys; end