From d4097316e1a0ed36e06235d06b28a594382009ac Mon Sep 17 00:00:00 2001 From: crater2150 Date: Mon, 3 Dec 2012 09:59:29 +0100 Subject: [PATCH 1/8] upgrade to 3.5, wip --- boxes.lua | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 boxes.lua diff --git a/boxes.lua b/boxes.lua new file mode 100644 index 0000000..20f64b4 --- /dev/null +++ b/boxes.lua @@ -0,0 +1,188 @@ +local wibox = require("wibox") +function exists(filename) + local file = io.open(filename) + if file then + io.close(file) + return true + else + return false + end +end + + +-- {{{ Reusable separators +spacer = wibox.widget.textbox({ name = "spacer" }) +spacer.set_text(" ") + +nullwidget = wibox.widget.textbox({ name = "nullwidget" }) +-- }}} + +-- {{{ Wibox + +--popup run + +-- Create a textclock widget +--clock = awful.widget.textclock({ align = "right" }) +mysystray = wibox.widget.systray() + +clock = wibox.widget.textbox() +vicious.register(clock, vicious.widgets.date, "%b %d, %R", 60) + + +-- music widget {{{ +mpdwidget = wibox.widget.textbox() +vicious.register(mpdwidget, vicious.widgets.mpd, + function(widget, args) + if args["{state}"] == "N/A" then + return "" + else + return "[ ♫ "..args["{Artist}"].." - "..args["{Title}"].." ]" + end + end, 3, {nil, os.getenv("MPD_HOST"), os.getenv("MPD_PORT")}) +-- }}} + +-- mail widget {{{ +mailwidget = wibox.widget.textbox() +vicious.register(mailwidget, vicious.widgets.mdir, + function(widget, args) + if args[1] > 0 then + naughty.notify({ + title = "New mail arrived", + text = "Unread "..args[2].." / New "..args[1], + position = "top_left" + + }) + widget.bg = theme.bg_urgent + widget.fg = theme.fg_urgent + elseif args[2] > 0 then + widget.bg = theme.bg_focus + widget.fg = theme.fg_focus + else + widget.bg = theme.bg_normal + widget.fg = theme.fg_normal + end + return "⬓⬓ Unread "..args[2].." / New "..args[1].. " " + end, 181, {os.getenv("HOME") .. "/.maildir/"}) +--}}} + +-- battery {{{ +if exists("/sys/class/power_supply/BAT0") then + batwidget0 = wibox.widget.textbox() + vicious.register(batwidget0, vicious.widgets.bat, + function (widget, args) + if args[2] == 0 then return "" + else + if args[2] < 15 then + widget.bg = theme.bg_urgent + widget.fg = theme.fg_urgent + else + widget.bg = theme.bg_normal + widget.fg = theme.fg_normal + end + return "( BAT0: "..args[1]..args[2].."% - "..args[3].." )" + end + end, 61, "BAT0") +else batwidget0 = nullwidget end + +if exists("/sys/class/power_supply/BAT1") then + batwidget1 = wibox.widget.textbox() + vicious.register(batwidget1, vicious.widgets.bat, + function (widget, args) + if args[2] == 0 then return "" + else + if args[2] < 15 then + widget.bg = theme.bg_urgent + widget.fg = theme.fg_urgent + else + widget.bg = theme.bg_normal + widget.fg = theme.fg_normal + end + return "( BAT1: "..args[1]..args[2].."% - "..args[3].." )" + end + end, 61, "BAT1") +else batwidget1 = nullwidget end + +if exists("/sys/class/power_supply/BAT2") then + batwidget2 = wibox.widget.textbox() + vicious.register(batwidget2, vicious.widgets.bat, + function (widget, args) + if args[2] == 0 then return "" + else + if args[2] < 15 then + widget.bg = theme.bg_urgent + widget.fg = theme.fg_urgent + else + widget.bg = theme.bg_normal + widget.fg = theme.fg_normal + end + return "( BAT2: "..args[1]..args[2].."% - "..args[3].." )" + end + end, 61, "BAT2") +else batwidget2 = nullwidget end + +--}}} + +cpulabel = wibox.widget.textbox() +vicious.register(cpulabel, vicious.widgets.cpu, "CPU: $1%") + +if exists("/sys/class/net/wlan0") then + wlanwidget = wibox.widget.textbox() + vicious.register(wlanwidget, vicious.widgets.wifi, " )( WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, "wlan0") +else wlanwidget = nullwidget end + +-- Create a wibox for each screen and add it +leftwibox = {} +rightwibox = {} + +mylayoutbox = {} +mytaglist = {} +mytaglist.buttons = awful.util.table.join( + awful.button({ }, 1, awful.tag.viewonly), + awful.button({ modkey }, 1, awful.client.movetotag), + awful.button({ }, 3, awful.tag.viewtoggle), + awful.button({ modkey }, 3, awful.client.toggletag), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) + ) + +for s = 1, screen.count() do + mylayoutbox[s] = awful.widget.layoutbox(s) + mylayoutbox[s]:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), + awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) + -- Create a taglist widget + mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) + + + -- Create the wibox + leftwibox[s] = awful.wibox({ position = "left", screen = s, width = 18 }) + rightwibox[s] = awful.wibox({ position = "right", screen = s , width = 18}) + -- Add widgets to the wibox - order matters + leftwibox[s].widgets = { + mytaglist[s], + mylayoutbox[s], + mailwidget, + spacer, + layout = awful.widget.layout.horizontal.rightleft + } + rightwibox[s].widgets = { + { + clock, spacer, + batwidget0, + batwidget1, + batwidget2, + wlanwidget, + spacer, cpulabel, cpuwidget, + spacer, mpdwidget, mpdnext, spacer, mpdprev, + spacer, + layout = awful.widget.layout.horizontal.leftright + }, + separator, spacer, mysystray, + layout = awful.widget.layout.horizontal.leftright + } +end +-- }}} +-- +-- vim:foldmethod=marker From b241b19f44fa93e6dda808f0d005b905b84353b0 Mon Sep 17 00:00:00 2001 From: crater2150 Date: Sat, 13 Apr 2013 17:17:09 +0200 Subject: [PATCH 2/8] update --- autobeautiful.lua | 12 + bindings.lua | 208 +++++--------- boxes.lua | 188 ------------- errors.lua | 27 ++ layouts.lua | 90 ++++++ modalbind.lua | 262 +++++++++-------- mpd.lua | 5 +- obvious | 2 +- rc.lua | 92 ++++-- rules.lua | 216 +++++++++----- teardrop.lua => scratch/drop.lua | 60 ++-- scratch/init.lua | 14 + scratch/pad.lua | 137 +++++++++ signals.lua | 54 +++- tags.lua | 128 +++++++-- zenburn/theme.lua => theme.lua | 45 +-- vicious | 2 +- wibox.lua | 201 ------------- widgets.lua | 266 ++++++++++++++++++ zenburn/awesome-icon.png | Bin 177 -> 0 bytes zenburn/layouts/dwindle.png | Bin 196 -> 0 bytes zenburn/layouts/fairh.png | Bin 191 -> 0 bytes zenburn/layouts/fairv.png | Bin 193 -> 0 bytes zenburn/layouts/floating.png | Bin 189 -> 0 bytes zenburn/layouts/fullscreen.png | Bin 199 -> 0 bytes zenburn/layouts/magnifier.png | Bin 191 -> 0 bytes zenburn/layouts/max.png | Bin 276 -> 0 bytes zenburn/layouts/spiral.png | Bin 196 -> 0 bytes zenburn/layouts/tile.png | Bin 189 -> 0 bytes zenburn/layouts/tilebottom.png | Bin 186 -> 0 bytes zenburn/layouts/tileleft.png | Bin 188 -> 0 bytes zenburn/layouts/tiletop.png | Bin 186 -> 0 bytes zenburn/taglist/squarefz.png | Bin 168 -> 0 bytes zenburn/taglist/squarez.png | Bin 171 -> 0 bytes zenburn/titlebar/close_focus.png | Bin 211 -> 0 bytes zenburn/titlebar/close_normal.png | Bin 370 -> 0 bytes zenburn/titlebar/floating_focus_active.png | Bin 210 -> 0 bytes zenburn/titlebar/floating_focus_inactive.png | Bin 339 -> 0 bytes zenburn/titlebar/floating_normal_active.png | Bin 361 -> 0 bytes zenburn/titlebar/floating_normal_inactive.png | Bin 328 -> 0 bytes zenburn/titlebar/maximized_focus_active.png | Bin 202 -> 0 bytes zenburn/titlebar/maximized_focus_inactive.png | Bin 337 -> 0 bytes zenburn/titlebar/maximized_normal_active.png | Bin 369 -> 0 bytes .../titlebar/maximized_normal_inactive.png | Bin 349 -> 0 bytes zenburn/titlebar/ontop_focus_active.png | Bin 188 -> 0 bytes zenburn/titlebar/ontop_focus_inactive.png | Bin 333 -> 0 bytes zenburn/titlebar/ontop_normal_active.png | Bin 349 -> 0 bytes zenburn/titlebar/ontop_normal_inactive.png | Bin 334 -> 0 bytes zenburn/titlebar/sticky_focus_active.png | Bin 199 -> 0 bytes zenburn/titlebar/sticky_focus_inactive.png | Bin 330 -> 0 bytes zenburn/titlebar/sticky_normal_active.png | Bin 361 -> 0 bytes zenburn/titlebar/sticky_normal_inactive.png | Bin 329 -> 0 bytes zenburn/zenburn-background.png | Bin 9477 -> 0 bytes 53 files changed, 1156 insertions(+), 853 deletions(-) create mode 100644 autobeautiful.lua delete mode 100644 boxes.lua create mode 100644 errors.lua create mode 100644 layouts.lua rename teardrop.lua => scratch/drop.lua (71%) create mode 100644 scratch/init.lua create mode 100644 scratch/pad.lua rename zenburn/theme.lua => theme.lua (78%) delete mode 100644 wibox.lua create mode 100644 widgets.lua delete mode 100644 zenburn/awesome-icon.png delete mode 100644 zenburn/layouts/dwindle.png delete mode 100644 zenburn/layouts/fairh.png delete mode 100644 zenburn/layouts/fairv.png delete mode 100644 zenburn/layouts/floating.png delete mode 100644 zenburn/layouts/fullscreen.png delete mode 100644 zenburn/layouts/magnifier.png delete mode 100644 zenburn/layouts/max.png delete mode 100644 zenburn/layouts/spiral.png delete mode 100644 zenburn/layouts/tile.png delete mode 100644 zenburn/layouts/tilebottom.png delete mode 100644 zenburn/layouts/tileleft.png delete mode 100644 zenburn/layouts/tiletop.png delete mode 100644 zenburn/taglist/squarefz.png delete mode 100644 zenburn/taglist/squarez.png delete mode 100644 zenburn/titlebar/close_focus.png delete mode 100644 zenburn/titlebar/close_normal.png delete mode 100644 zenburn/titlebar/floating_focus_active.png delete mode 100644 zenburn/titlebar/floating_focus_inactive.png delete mode 100644 zenburn/titlebar/floating_normal_active.png delete mode 100644 zenburn/titlebar/floating_normal_inactive.png delete mode 100644 zenburn/titlebar/maximized_focus_active.png delete mode 100644 zenburn/titlebar/maximized_focus_inactive.png delete mode 100644 zenburn/titlebar/maximized_normal_active.png delete mode 100644 zenburn/titlebar/maximized_normal_inactive.png delete mode 100644 zenburn/titlebar/ontop_focus_active.png delete mode 100644 zenburn/titlebar/ontop_focus_inactive.png delete mode 100644 zenburn/titlebar/ontop_normal_active.png delete mode 100644 zenburn/titlebar/ontop_normal_inactive.png delete mode 100644 zenburn/titlebar/sticky_focus_active.png delete mode 100644 zenburn/titlebar/sticky_focus_inactive.png delete mode 100644 zenburn/titlebar/sticky_normal_active.png delete mode 100644 zenburn/titlebar/sticky_normal_inactive.png delete mode 100644 zenburn/zenburn-background.png diff --git a/autobeautiful.lua b/autobeautiful.lua new file mode 100644 index 0000000..0935cf7 --- /dev/null +++ b/autobeautiful.lua @@ -0,0 +1,12 @@ +local beautiful = require("beautiful") +local gears = require("gears") + +beautiful.init(awful.util.getdir("config") .. "/theme.lua") + +if beautiful.wallpaper then + for s = 1, screen.count() do + gears.wallpaper.maximized(beautiful.wallpaper, s, true) + end +end + +return beautiful diff --git a/bindings.lua b/bindings.lua index cc2845d..4a949f5 100644 --- a/bindings.lua +++ b/bindings.lua @@ -1,6 +1,15 @@ -local aweswt = require("aweswt") -local mb = require("modalbind") +-- key bindings +local awful = awful +local conf = conf local mpd = require("mpd") +local obvious = {} +local scratch = require("scratch") +obvious.popup_run_prompt = require("obvious.popup_run_prompt") + +local modkey = conf.modkey or "Mod4" +local mb = require("modalbind") + +local bindings = {mb = mb} -- {{{ Mouse bindings root.buttons(awful.util.table.join( @@ -9,14 +18,16 @@ awful.button({ }, 5, awful.tag.viewprev) )) -- }}} +local function spawnf(cmd) return function() awful.util.spawn(cmd) end end mpdmap = { name = "MPD", m = mpd.ctrl.toggle, n = mpd.ctrl.next, N = mpd.ctrl.prev, - s = function() awful.util.spawn("mpd") end, - g = function () awful.util.spawn(cmd.mpd_client) end + s = spawnf("mpd"), + S = spawnf("mpd --kill"), + g = spawnf(conf.cmd.mpd_client) } mpdpromts = { name = "MPD PROMPTS", @@ -28,91 +39,49 @@ mpdpromts = { progmap = { name = "PROGRAMS", - f = function () awful.util.spawn(cmd.browser) end, - i = function () awful.util.spawn(cmd.im_client) end, - m = function () awful.util.spawn(cmd.mail_client) end + f = spawnf(conf.cmd.browser), + i = spawnf(conf.cmd.im_client), + I = spawnf(conf.cmd.irc_client), + m = spawnf(conf.cmd.mail_client) } --- {{{ Key bindings -globalkeys = awful.util.table.join( - --{{{ Focus and Tags - awful.key({ modkey, }, "Left", awful.tag.viewprev ), - awful.key({ modkey, }, "Right", awful.tag.viewnext ), - awful.key({ modkey, }, "Escape", awful.tag.history.restore), +adapters = { u = "wwan", w = "wlan", b = "bluetooth" } +function rfkill(cmd) + map={ name = string.upper(cmd) } + for key, adapter in pairs(adapters) do + map[key] = spawnf("sudo rfkill "..cmd.." "..adapter) + end + print(map["name"]) + return map +end +-- wirelessmap = { +-- name = "RFKILL", +-- b = function () mb.grab(rfkill("block")) end, +-- u = function () mb.grab(rfkill("unblock")) end +-- } - awful.key({ modkey, }, "j", - function () - awful.client.focus.byidx( 1) - if client.focus then client.focus:raise() end - end), - awful.key({ modkey, }, "k", - function () - awful.client.focus.byidx(-1) - if client.focus then client.focus:raise() end - end), - - awful.key({ modkey, "Control" }, "j", function () - awful.screen.focus_relative( 1) - end), - - awful.key({ modkey, "Control" }, "k", function () - awful.screen.focus_relative(-1) - end), - - awful.key({ }, "Menu", aweswt.switch), - --}}} - - --{{{ Layout manipulation - awful.key({ modkey, "Shift" }, "j", function () - awful.client.swap.byidx( 1) - end), - - awful.key({ modkey, "Shift" }, "k", function () - awful.client.swap.byidx( -1) - end), - - awful.key({ modkey, }, "u", awful.client.urgent.jumpto), - awful.key({ modkey, }, "Tab", function () - awful.client.focus.history.previous() - if client.focus then - client.focus:raise() - end - end), - awful.key({ "Mod1", }, "Tab", function () - awful.client.focus.history.previous() - if client.focus then - client.focus:raise() - end - end), - - awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end), - awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end), - awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end), - awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), - awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end), - awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end), - awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end), - awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, 0) end), - - --}}} +function bindings.extend_and_register_key_table(globalkeys) + local totalkeys = globalkeys or {} + totalkeys = awful.util.table.join(totalkeys, + awful.key({ }, "Menu", spawnf('wmselect')), awful.key({ modkey, "Control" }, "r", awesome.restart), awful.key({ modkey, "Shift" }, "q", awesome.quit), - awful.key({ modkey, }, "Return", function () awful.util.spawn(cmd.terminal) end), + awful.key({ modkey, }, "Return", spawnf(conf.cmd.terminal)), --{{{ Modal mappings awful.key({ modkey }, "m", function () mb.grab(mpdmap, true) end), awful.key({ modkey, "Shift" }, "m", function () mb.grab(mpdpromts) end), awful.key({ modkey }, "c", function () mb.grab(progmap) end), - + awful.key({ modkey }, "w", function () mb.grab(wirelessmap) end), --}}} --{{{ Audio control - awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Master 2%-")end ), - awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Master 2%+")end ), - awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer set Master toggle") end), + awful.key({ }, "XF86AudioLowerVolume", spawnf("amixer set Master 2%-")), + awful.key({ }, "XF86AudioRaiseVolume", spawnf("amixer set Master 2%+")), + awful.key({ }, "XF86AudioMute", spawnf("amixer set Master toggle")), awful.key({ }, "XF86AudioPlay", mpd.ctrl.toggle), awful.key({ }, "XF86AudioNext", mpd.ctrl.next), awful.key({ }, "XF86AudioPrev", mpd.ctrl.prev), @@ -120,38 +89,38 @@ globalkeys = awful.util.table.join( --}}} -- {{{ teardrops - awful.key({ }, "F12", function () teardrop(cmd.terminal,"center","center", 0.99, 0.7)end ), - awful.key({ modkey }, "`", function () teardrop("urxvtc -e ncmpcpp","bottom","center", 0.99, 0.4)end ), - awful.key({ }, "Print", function () teardrop("urxvtc -e alsamixer","top","center", 0.99, 0.4)end ), + awful.key({ }, "F12", function () + scratch.drop(conf.cmd.terminal,"center","center", 0.99, 0.7) + end ), + awful.key({ modkey }, "`", function () + scratch.drop("urxvtc -e ncmpcpp","bottom","center", 0.99, 0.4) + end ), + awful.key({ }, "Print", function () + scratch.drop("galsamixer","top","center", 0.99, 0.4) + end ), -- }}} --{{{ Prompt - awful.key({ modkey }, "r", function () - obvious.popup_run_prompt.set_prompt_string(" Run~ ") - obvious.popup_run_prompt.set_cache("history") - obvious.popup_run_prompt.set_run_function(awful.util.spawn) - obvious.popup_run_prompt.run_prompt() - end), - awful.key({ modkey }, "e", function () - obvious.popup_run_prompt.set_prompt_string(" exec Lua~ ") - obvious.popup_run_prompt.set_cache("history_eval") - obvious.popup_run_prompt.set_run_function(awful.util.eval) - obvious.popup_run_prompt.run_prompt() - end), + awful.key({ modkey }, "r", spawnf("dmenu_run")), + + awful.key({ modkey }, "s", spawnf("dmsearch")), --}}} --{{{ misc. XF86 Keys - awful.key({ }, "XF86Sleep", function () awful.util.spawn("/usr/local/bin/s2ram")end ), - awful.key({ }, "XF86Away", function () awful.util.spawn("xlock")end ), - awful.key({ }, "XF86TouchpadToggle", function () awful.util.spawn("touchpad")end ), + awful.key({ }, "XF86Sleep", spawnf("s2ram")), + awful.key({ }, "XF86Away", spawnf("xlock")), + awful.key({ }, "XF86TouchpadToggle", spawnf("touchpad")) + ) --}}} - awful.key({ modkey }, "BackSpace", rodentbane.start) -) + -- Set keys + root.keys(totalkeys) +end + function client_opacity_set(c, default, max, step) if c.opacity < 0 or c.opacity > 1 then @@ -165,7 +134,6 @@ function client_opacity_set(c, default, max, step) end end - clientkeys = awful.util.table.join( awful.key({ modkey, "Shift" }, "f", function (c) c.fullscreen = not c.fullscreen end), awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end), @@ -181,60 +149,10 @@ clientkeys = awful.util.table.join( awful.key({ }, "XF86Calculater", awful.client.movetoscreen ) ) --- Compute the maximum number of digit we need, limited to 22 -keynumber = 0 -for s = 1, screen.count() do - keynumber = math.min(22, math.max(#tags[s], keynumber)); -end - --- Bind all key numbers to tags. --- Be careful: we use keycodes to make it works on any keyboard layout. --- This should map on the top row of your keyboard, usually 1 to 9. --- FKeys: 67-78 -for i = 1, keynumber do - if i < 10 then - k = "#" .. i + 9 - elseif i == 10 then - k = "#19" - elseif i > 10 then - k = "F" .. i - 10 - end - globalkeys = awful.util.table.join(globalkeys, - awful.key({ modkey }, k, - function () - local screen = mouse.screen - if tags[screen][i] then - awful.tag.viewonly(tags[screen][i]) - end - end), - awful.key({ modkey, "Control" }, k, - function () - local screen = mouse.screen - if tags[screen][i] then - awful.tag.viewtoggle(tags[screen][i]) - end - end), - awful.key({ modkey, "Shift" }, k, - function () - if client.focus and tags[client.focus.screen][i] then - awful.client.movetotag(tags[client.focus.screen][i]) - end - end), - awful.key({ modkey, "Control", "Shift" }, k, - function () - if client.focus and tags[client.focus.screen][i] then - awful.client.toggletag(tags[client.focus.screen][i]) - end - end)) -end - clientbuttons = awful.util.table.join( awful.button({ }, 1, function (c) client.focus = c; c:raise() end), awful.button({ modkey }, 1, awful.mouse.client.move), awful.button({ modkey }, 3, awful.mouse.client.resize)) --- Set keys -root.keys(globalkeys) --- }}} +return bindings -- vim: set fenc=utf-8 tw=80 foldmethod=marker : - diff --git a/boxes.lua b/boxes.lua deleted file mode 100644 index 20f64b4..0000000 --- a/boxes.lua +++ /dev/null @@ -1,188 +0,0 @@ -local wibox = require("wibox") -function exists(filename) - local file = io.open(filename) - if file then - io.close(file) - return true - else - return false - end -end - - --- {{{ Reusable separators -spacer = wibox.widget.textbox({ name = "spacer" }) -spacer.set_text(" ") - -nullwidget = wibox.widget.textbox({ name = "nullwidget" }) --- }}} - --- {{{ Wibox - ---popup run - --- Create a textclock widget ---clock = awful.widget.textclock({ align = "right" }) -mysystray = wibox.widget.systray() - -clock = wibox.widget.textbox() -vicious.register(clock, vicious.widgets.date, "%b %d, %R", 60) - - --- music widget {{{ -mpdwidget = wibox.widget.textbox() -vicious.register(mpdwidget, vicious.widgets.mpd, - function(widget, args) - if args["{state}"] == "N/A" then - return "" - else - return "[ ♫ "..args["{Artist}"].." - "..args["{Title}"].." ]" - end - end, 3, {nil, os.getenv("MPD_HOST"), os.getenv("MPD_PORT")}) --- }}} - --- mail widget {{{ -mailwidget = wibox.widget.textbox() -vicious.register(mailwidget, vicious.widgets.mdir, - function(widget, args) - if args[1] > 0 then - naughty.notify({ - title = "New mail arrived", - text = "Unread "..args[2].." / New "..args[1], - position = "top_left" - - }) - widget.bg = theme.bg_urgent - widget.fg = theme.fg_urgent - elseif args[2] > 0 then - widget.bg = theme.bg_focus - widget.fg = theme.fg_focus - else - widget.bg = theme.bg_normal - widget.fg = theme.fg_normal - end - return "⬓⬓ Unread "..args[2].." / New "..args[1].. " " - end, 181, {os.getenv("HOME") .. "/.maildir/"}) ---}}} - --- battery {{{ -if exists("/sys/class/power_supply/BAT0") then - batwidget0 = wibox.widget.textbox() - vicious.register(batwidget0, vicious.widgets.bat, - function (widget, args) - if args[2] == 0 then return "" - else - if args[2] < 15 then - widget.bg = theme.bg_urgent - widget.fg = theme.fg_urgent - else - widget.bg = theme.bg_normal - widget.fg = theme.fg_normal - end - return "( BAT0: "..args[1]..args[2].."% - "..args[3].." )" - end - end, 61, "BAT0") -else batwidget0 = nullwidget end - -if exists("/sys/class/power_supply/BAT1") then - batwidget1 = wibox.widget.textbox() - vicious.register(batwidget1, vicious.widgets.bat, - function (widget, args) - if args[2] == 0 then return "" - else - if args[2] < 15 then - widget.bg = theme.bg_urgent - widget.fg = theme.fg_urgent - else - widget.bg = theme.bg_normal - widget.fg = theme.fg_normal - end - return "( BAT1: "..args[1]..args[2].."% - "..args[3].." )" - end - end, 61, "BAT1") -else batwidget1 = nullwidget end - -if exists("/sys/class/power_supply/BAT2") then - batwidget2 = wibox.widget.textbox() - vicious.register(batwidget2, vicious.widgets.bat, - function (widget, args) - if args[2] == 0 then return "" - else - if args[2] < 15 then - widget.bg = theme.bg_urgent - widget.fg = theme.fg_urgent - else - widget.bg = theme.bg_normal - widget.fg = theme.fg_normal - end - return "( BAT2: "..args[1]..args[2].."% - "..args[3].." )" - end - end, 61, "BAT2") -else batwidget2 = nullwidget end - ---}}} - -cpulabel = wibox.widget.textbox() -vicious.register(cpulabel, vicious.widgets.cpu, "CPU: $1%") - -if exists("/sys/class/net/wlan0") then - wlanwidget = wibox.widget.textbox() - vicious.register(wlanwidget, vicious.widgets.wifi, " )( WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, "wlan0") -else wlanwidget = nullwidget end - --- Create a wibox for each screen and add it -leftwibox = {} -rightwibox = {} - -mylayoutbox = {} -mytaglist = {} -mytaglist.buttons = awful.util.table.join( - awful.button({ }, 1, awful.tag.viewonly), - awful.button({ modkey }, 1, awful.client.movetotag), - awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ modkey }, 3, awful.client.toggletag), - awful.button({ }, 4, awful.tag.viewnext), - awful.button({ }, 5, awful.tag.viewprev) - ) - -for s = 1, screen.count() do - mylayoutbox[s] = awful.widget.layoutbox(s) - mylayoutbox[s]:buttons(awful.util.table.join( - awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), - awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), - awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), - awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) - -- Create a taglist widget - mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) - - - -- Create the wibox - leftwibox[s] = awful.wibox({ position = "left", screen = s, width = 18 }) - rightwibox[s] = awful.wibox({ position = "right", screen = s , width = 18}) - -- Add widgets to the wibox - order matters - leftwibox[s].widgets = { - mytaglist[s], - mylayoutbox[s], - mailwidget, - spacer, - layout = awful.widget.layout.horizontal.rightleft - } - rightwibox[s].widgets = { - { - clock, spacer, - batwidget0, - batwidget1, - batwidget2, - wlanwidget, - spacer, cpulabel, cpuwidget, - spacer, mpdwidget, mpdnext, spacer, mpdprev, - spacer, - layout = awful.widget.layout.horizontal.leftright - }, - separator, spacer, mysystray, - layout = awful.widget.layout.horizontal.leftright - } -end --- }}} --- --- vim:foldmethod=marker diff --git a/errors.lua b/errors.lua new file mode 100644 index 0000000..268b601 --- /dev/null +++ b/errors.lua @@ -0,0 +1,27 @@ +-- Notification library +local naughty = naughty + +-- {{{ Error handling +-- Check if awesome encountered an error during startup and fell back to +-- another config (This code will only ever execute for the fallback config) +if awesome.startup_errors then + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors }) +end + +-- Handle runtime errors after startup +do + local in_error = false + awesome.connect_signal("debug::error", function (err) + -- Make sure we don't go into an endless error loop + if in_error then return end + in_error = true + + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = err }) + in_error = false + end) +end +-- }}} diff --git a/layouts.lua b/layouts.lua new file mode 100644 index 0000000..7bf2a52 --- /dev/null +++ b/layouts.lua @@ -0,0 +1,90 @@ +local awful = awful +local conf = conf +local modkey = conf.modkey or "Mod4" + +local layouts={ mt={} } +local list = { + awful.layout.suit.fair, + awful.layout.suit.fair.horizontal, + awful.layout.suit.tile, + awful.layout.suit.tile.bottom, + awful.layout.suit.max, + awful.layout.suit.max.fullscreen, + awful.layout.suit.floating +} + +function layouts.set_list(layout_list) + list = layout_list +end + +function layouts.extend_key_table(globalkeys) + local layoutkeys = globalkeys or {} + return awful.util.table.join(layoutkeys, + awful.key({ modkey }, "j", function () + awful.client.focus.byidx( 1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey }, "k", function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + 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 + client.focus:raise() + end + end), + awful.key({ "Mod1", }, "Tab", function () + awful.client.focus.history.previous() + if client.focus then + client.focus:raise() + end + end), + awful.key({ modkey, }, "l", function () + awful.tag.incmwfact( 0.05) + end), + awful.key({ modkey, }, "h", function () + awful.tag.incmwfact(-0.05) + end), + awful.key({ modkey, "Shift" }, "h", function () + awful.tag.incnmaster( 1) + end), + awful.key({ modkey, "Shift" }, "l", function () + awful.tag.incnmaster(-1) + end), + awful.key({ modkey, "Control" }, "h", function () + awful.tag.incncol(1) + end), + awful.key({ modkey, "Control" }, "l", function () + awful.tag.incncol(-1) + end), + awful.key({ modkey, }, "space", function () + awful.layout.inc(list, 1) + end), + awful.key({ modkey, "Shift" }, "space", function () + awful.layout.inc(list, -1) + end), + awful.key({ modkey, "Shift" }, "j", function () + awful.client.swap.byidx( 1) + end), + awful.key({ modkey, "Shift" }, "k", function () + awful.client.swap.byidx( -1) + end), + awful.key({ modkey, "Control" }, "j", function () + awful.screen.focus_relative( 1) + 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 + +layouts.mt.__index = list +layouts.mt.__newindex = list +return setmetatable(layouts, layouts.mt) diff --git a/modalbind.lua b/modalbind.lua index ee56437..f3f027c 100644 --- a/modalbind.lua +++ b/modalbind.lua @@ -4,7 +4,153 @@ local modewidget = {} local modewibox = { screen = -1 } --local functions -local ensure_init, set_default, update_settings, show_box, hide_box + +local defaults = {} + +defaults.opacity = 1.0 +defaults.height = 22 +defaults.border_width = 1 +defaults.x_offset = 0 +defaults.y_offset = 0 +defaults.show_options = true + +-- Clone the defaults for the used settings +local settings = {} +for key, value in pairs(defaults) do + settings[key] = value +end + +local function update_settings() + for s, value in ipairs(modewibox) do + value.border_width = settings.border_width + set_default(s) + value.opacity = settings.opacity + end +end + + +--- Change the opacity of the modebox. +-- @param amount opacity between 0.0 and 1.0, or nil to use default +M.set_opacity = function (amount) + settings.opacity = amount or defaults.opacity + update_settings() +end + +--- Change height of the modebox. +-- @param amount height in pixels, or nil to use default +M.set_height = function (amount) + settings.height = amount or defaults.height + update_settings() +end + +--- Change border width of the modebox. +-- @param amount width in pixels, or nil to use default +M.set_border_width = function (amount) + settings.border_width = amount or defaults.border_width + update_settings() +end + +--- Change horizontal offset of the modebox. +-- set location for the box with set_corner(). The box is shifted to the right +-- if it is in one of the left corners or to the left otherwise +-- @param amount horizontal shift in pixels, or nil to use default +M.set_x_offset = function (amount) + settings.x_offset = amount or defaults.x_offset + update_settings() +end + +--- Change vertical offset of the modebox. +-- set location for the box with set_corner(). The box is shifted downwards if it +-- is in one of the upper corners or upwards otherwise. +-- @param amount vertical shift in pixels, or nil to use default +M.set_y_offset = function (amount) + settings.y_offset = amount or defaults.y_offset + update_settings() +end + +--- Set the corner, where the modebox will be displayed +-- If a parameter is not a valid orientation (see below), the function returns +-- without doing anything +-- @param vertical either top or bottom +-- @param horizontal either left or right +M.set_corner = function (vertical, horizontal) + if (vertical ~= "top" and vertical ~= "bottom") then + return + end + if (horizontal ~= "left" and horizontal ~= "right") then + return + end + settings.corner_v = vertical or defaults.corner_v + settings.corner_h = horizontal or defaults.corner_h +end + +M.set_show_options = function (bool) + settings.show_options = bool +end + +local function set_default(s) + minwidth, minheight = modewidget[s]:fit(screen[s].geometry.width, + screen[s].geometry.height) + modewibox[s].width = minwidth + 1; + modewibox[s].height = math.max(settings.height, minheight) + 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 +end + +local function ensure_init() + if inited then + return + end + inited = true + for s = 1, screen.count() do + modewidget[s] = wibox.widget.textbox() + modewidget[s]:set_align("center") + + modewibox[s] = wibox({ + fg = beautiful.fg_normal, + bg = beautiful.bg_normal, + border_width = settings.border_width, + border_color = beautiful.bg_focus, + }) + + local modelayout = {} + modelayout[s] = wibox.layout.fixed.horizontal() + modelayout[s]:add(modewidget[s]) + modewibox[s]:set_widget(modelayout[s]); + set_default(s) + modewibox[s].visible = false + modewibox[s].screen = s + modewibox[s].ontop = true + + -- Widgets for prompt wibox + modewibox[s].widgets = { + modewidget[s], + layout = wibox.layout.fixed.horizontal + } + end +end + +local function show_box(s, map) + ensure_init() + modewibox.screen = s + local label = " -- " .. map.name .. " -- " + if settings.show_options then + for key in pairs(map) do + if key ~= "name" then label = label .. " " .. key end + end + end + modewidget[s]:set_text(label) + modewibox[s].visible = true + set_default(s) +end + +local function hide_box() + local s = modewibox.screen + if s ~= -1 then modewibox[s].visible = false end +end + M.grab = function(keymap, stay_in_mode) if keymap.name then show_box(mouse.screen, keymap) end @@ -31,118 +177,10 @@ M.grab = function(keymap, stay_in_mode) return true end) end - --- Partially adapted from Obvious Widget Library module "popup_run_prompt" -- --- Original Author: Andrei "Garoth" Thorp -- --- Copyright 2009 Andrei "Garoth" Thorp -- - -local defaults = {} --- Default is 1 for people without compositing -defaults.opacity = 1.0 -defaults.height = 22 -defaults.border_width = 1 -defaults.x_offset = 18 -defaults.show_options = true - --- Clone the defaults for the used settings -local settings = {} -for key, value in pairs(defaults) do - settings[key] = value +M.grabf = function(keymap, stay_in_mode) + return function() M.grab(keymap, stay_in_mode) end end - -M.set_opacity = function (amount) - settings.opacity = amount or defaults.opacity - update_settings() -end - -M.set_height = function (amount) - settings.height = amount or defaults.height - update_settings() -end - -M.set_border_width = function (amount) - settings.border_width = amount or defaults.border_width - update_settings() -end - -M.set_x_offset = function (amount) - settings.x_offset = amount or defaults.x_offset - update_settings() -end - -M.set_show_options = function (bool) - settings.show_options = bool -end - -ensure_init = function () - if inited then - return - end - - inited = true - for s = 1, screen.count() do - modewidget[s] = widget({ - type = "textbox", - name = "modewidget" .. s, - align = "center" - }) - - modewibox[s] = wibox({ - fg = beautiful.fg_normal, - bg = beautiful.bg_normal, - border_width = settings.border_width, - border_color = beautiful.bg_focus, - }) - set_default(s) - modewibox[s].visible = false - modewibox[s].screen = s - modewibox[s].ontop = true - - -- Widgets for prompt wibox - modewibox[s].widgets = { - modewidget[s], - layout = awful.widget.layout.vertical.center - } - end -end - -set_default = function (s) - modewibox[s]:geometry({ - width = modewidget[s].extents(modewidget[s]).width, - height = settings.height, - x = settings.x_offset < 0 and - screen[s].geometry.x - width + settings.x_offset or - settings.x_offset, - y = screen[s].geometry.y + screen[s].geometry.height - settings.height - }) -end - -update_settings = function () - for s, value in ipairs(modewibox) do - value.border_width = settings.border_width - set_default(s) - value.opacity = settings.opacity - end -end - -show_box = function (s, map) - ensure_init() - modewibox.screen = s - local label = " -- " .. map.name .. " -- " - if settings.show_options then - for key in pairs(map) do - if key ~= "name" then label = label .. " " .. key end - end - end - modewidget[s].text = label - set_default(s) - modewibox[s].visible = true -end - -hide_box = function () - local s = modewibox.screen - if s ~= -1 then modewibox[s].visible = false end -end +M.wibox = function() return modewibox[1] end return M diff --git a/mpd.lua b/mpd.lua index aeade91..1d8239c 100644 --- a/mpd.lua +++ b/mpd.lua @@ -2,6 +2,7 @@ require "mpdc" local M = {} local type = "" +local conf = conf -- local functions local show, mpc_play_search, notify @@ -74,9 +75,9 @@ end -- {{{ mpd.prompt submodule -local clear_before = cfg.mpd_prompt_clear_before == nil and +local clear_before = conf.mpd_prompt_clear_before == nil and true or - cfg.mpd_prompt_clear_before + conf.mpd_prompt_clear_before M.prompt = {} diff --git a/obvious b/obvious index dccf3cb..c5b8844 160000 --- a/obvious +++ b/obvious @@ -1 +1 @@ -Subproject commit dccf3cb530ff250c0e5db363d04e1ef803cb3808 +Subproject commit c5b884459194a15a38b88c99d5558a64efaf4e89 diff --git a/rc.lua b/rc.lua index 5cd37d5..3183d93 100644 --- a/rc.lua +++ b/rc.lua @@ -1,38 +1,68 @@ +-- libraries {{{ +awful = require("awful") +awful.rules = require("awful.rules") + require("awful.autofocus") +wibox = require("wibox") +beautiful = require("autobeautiful") +naughty = require("naughty") +conf = require("localconf") + require("errors") +-- }}} --- Standard awesome library -require("awful") -require("awful.autofocus") -require("awful.rules") -require("beautiful") -require("naughty") -require("teardrop") -require("obvious.popup_run_prompt") -require("vicious") -require("rodentbane.rodentbane") +layouts = require('layouts') -MY_PATH = os.getenv("HOME") .. "/.config/awesome/" +-- {{{ Tags -dofile (MY_PATH .. "localconf.lua") +tags = require('tags') +tags.setup() +-- }}} --- Themes define colours, icons, and wallpapers -beautiful.init("/home/crater2150/.config/awesome/zenburn/theme.lua") +-- {{{ widgets +widgets = require("widgets") +widgets.setup() +for s = 1, screen.count() do + local ltop = widgets.layout(s,"left","top") + local rtop = widgets.layout(s,"right","top") + local lbottom = widgets.layout(s,"left","bottom") + -- {{{ + widgets.add.mail(s, ltop, { os.getenv("HOME") .. "/.maildir/" }) + widgets.add.spacer(ltop) + widgets.add.clock(s, ltop) --- Table of layouts to cover with awful.layout.inc, order matters. -layouts = -{ - awful.layout.suit.fair, - awful.layout.suit.fair.horizontal, - awful.layout.suit.tile, - awful.layout.suit.tile.bottom, - awful.layout.suit.max, - awful.layout.suit.max.fullscreen, - awful.layout.suit.floating -} + widgets.add.layout(s, lbottom) + widgets.add.taglist(s, lbottom) -dofile (MY_PATH .. "tags.lua") -dofile (MY_PATH .. "wibox.lua") -dofile (MY_PATH .. "bindings.lua") -dofile (MY_PATH .. "rules.lua") -dofile (MY_PATH .. "signals.lua") --- dofile (MY_PATH .. "uzbl.lua") + widgets.add.cpu(s, rtop) + widgets.add.spacer(rtop) + widgets.add.battery(s, rtop, "BAT0") + widgets.add.spacer(rtop) + widgets.add.battery(s, rtop, "BAT1") + widgets.add.spacer(rtop) + widgets.add.wifi(s, rtop, "wlan0") + widgets.add.spacer(rtop) + widgets.add.systray(s, rtop) + + widgets.set_spacer_text(" ◈ ") +end +-- }}} + +-- {{{ Key bindings +globalkeys = {} +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) +-- }}} + +-- {{{ rules +rules = require("rules") +rules.setup() +-- }}} + +require("signals") + +-- +-- vim: fdm=marker diff --git a/rules.lua b/rules.lua index 475b6f5..b512885 100644 --- a/rules.lua +++ b/rules.lua @@ -1,67 +1,151 @@ +local rules = { mt={} } +local awful = awful +local conf = conf +local tags = tags +local beautiful = beautiful +local inspect=require("inspect") -awful.rules.rules = { - -- All clients will match this rule. - { rule = { }, - properties = { border_width = beautiful.border_width, - border_color = beautiful.border_normal, - focus = true, - size_hints_honor = false, - keys = clientkeys, - minimized = false, - --skip_taskbar = true, - buttons = clientbuttons } }, - { rule = { class = "MPlayer" }, - properties = { floating = true, - size_hints_honor = true } }, - { rule = { class = "Passprompt" }, - properties = { floating = true, - ontop = true, - focus = true } }, - { rule = { class = "pinentry" }, - properties = { floating = true } }, - -- Set Firefox to always map on tags number 2 of screen 1. - { rule = { class = "Uzbl-core" }, - properties = { tag = tags[rule_screen][2], - skip_taskbar = false } }, - { rule = { class = "Firefox", instance = "Navigator" }, - properties = { tag = tags[rule_screen][2], - floating = false, minimized = false } }, - { rule = { class = "Pidgin" }, - properties = { tag = tags[rule_screen][3], opacity = 0.9 } }, - { rule = { role = "buddy_list" }, - properties = { master = true } }, - { rule = { role = "conversation" }, - callback = awful.client.setslave }, - { rule = { instance = "Weechat"}, - properties = { tag = tags[rule_screen][3]} , - callback = awful.client.setslave}, - { rule = { class = "Irssi"}, - properties = { tag = tags[rule_screen][3]} , - callback = awful.client.setslave}, - { rule = { class = "Claws-mail" }, - properties = { tag = tags[rule_screen][4] } }, - { rule = { instance = "Gmutt" }, - properties = { tag = tags[rule_screen][4] } }, - { rule = { instance = "Gcanto" }, - properties = { tag = tags[rule_screen][5] } }, - { rule = { instance = "Gncmpcpp" }, - properties = { tag = tags[rule_screen][6] } }, - { rule = { class = "Gmpc" }, - properties = { tag = tags[rule_screen][6] } }, - { rule = { class = "Deluge" }, - properties = { tag = tags[rule_screen][7] } }, - { rule = { class = "Cellwriter" }, - properties = { tag = tags[rule_screen][1], - ontop = true, - size_hints_honor = true, - float = true, - sticky = true, - fullscreen = true - } }, - { rule = { class = "Xhtop" }, - properties = { tag = tags[rule_screen][22] } }, - { rule = { class = "URxvt" }, - properties = { opacity = 0.9 } }, - { rule = { instance = "URxvt" }, - properties = { opacity = 0.9 } }, -} +local rule_screen = conf.rule_screen or 1 + +local function setup(self) + awful.rules.rules = { + -- All clients will match this rule. + { + rule = { }, + properties = { + border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = true, + size_hints_honor = false, + keys = clientkeys, + minimized = false, + --skip_taskbar = true, + buttons = clientbuttons + } + }, + { + rule = { class = "Passprompt" }, + properties = { ontop = true, focus = true} + }, + { + rule_any = { class = { + "pinentry", "Passprompt", "MPlayer" + }}, + properties = { floating = true, size_hints_honor = true } + }, + + { + rule = { class = "Firefox", instance = "Navigator" }, + properties = { + tag = tags[rule_screen][2], + floating = false, minimized = false + } + }, + { + rule_any = { class = {"Pidgin"}, instance = {"Weechat"} }, + properties = { + tag = tags[rule_screen][3], opacity = 0.9 + } + }, + { + rule = { role = "buddy_list" }, + properties = { + master = true + } + }, + { + rule_any = { role ={ "conversation" }, instance = { "Weechat" } }, + callback = awful.client.setslave + }, + { + rule = { class = "Irssi"}, + properties = { + tag = tags[rule_screen][3] + } , + callback = awful.client.setslave + }, + { + rule = { class = "Claws-mail" }, + properties = { + tag = tags[rule_screen][4] + } + }, + { + rule = { instance = "Gmutt" }, + properties = { + tag = tags[rule_screen][4] + } + }, + { + rule = { instance = "Gcanto" }, + properties = { + tag = tags[rule_screen][5] + } + }, + { + rule = { instance = "Gncmpcpp" }, + properties = { + tag = tags[rule_screen][6] + } + }, + { + rule = { class = "Gmpc" }, + properties = { + tag = tags[rule_screen][6] + } + }, + { + rule = { class = "Deluge" }, + properties = { + tag = tags[rule_screen][7] + } + }, + { + rule = { class = "Cellwriter" }, + properties = { + tag = tags[rule_screen][1], + ontop = true, + size_hints_honor = true, + float = true, + sticky = true, + fullscreen = true + } + }, + { + rule = { class = "Xhtop" }, + properties = { + tag = tags[rule_screen][22] + } + }, + { + rule = { class = "URxvt" }, + properties = { + opacity = 0.9 + } + }, + { + rule = { class = "Gvim" }, + properties = { + opacity = 0.9 + } + }, + { + rule = { instance = "Awesomelog" }, + properties = { + tag = tags[rule_screen][14] + } + }, + { + rule = { class = "GLSlideshow" }, + properties = { + + } + } + } +end + +rules.setup = setup + +rules.mt.__call = setup + +return setmetatable(rules, rules.mt) diff --git a/teardrop.lua b/scratch/drop.lua similarity index 71% rename from teardrop.lua rename to scratch/drop.lua index f9ce7bb..4690e65 100644 --- a/teardrop.lua +++ b/scratch/drop.lua @@ -1,26 +1,27 @@ ----------------------------------------------------------------- +------------------------------------------------------------------- -- Drop-down applications manager for the awesome window manager ----------------------------------------------------------------- --- Adrian C. +------------------------------------------------------------------- +-- Coded by: * Lucas de Vries +-- Hacked by: * Adrian C. (anrxc) -- Licensed under the WTFPL version 2 -- * http://sam.zoy.org/wtfpl/COPYING ----------------------------------------------------------------- +------------------------------------------------------------------- -- To use this module add: --- require("teardrop") +-- local scratch = require("scratch") -- to the top of your rc.lua, and call it from a keybinding: --- teardrop(prog, vert, horiz, width, height, sticky, screen) +-- scratch.drop(prog, vert, horiz, width, height, sticky, screen) -- -- Parameters: -- prog - Program to run; "urxvt", "gmrun", "thunderbird" -- vert - Vertical; "bottom", "center" or "top" (default) -- horiz - Horizontal; "left", "right" or "center" (default) -- width - Width in absolute pixels, or width percentage --- when < 1 (0.9999 (99.9% of the screen) by default) +-- when <= 1 (1 (100% of the screen) by default) -- height - Height in absolute pixels, or height percentage --- when < 1 (0.25 (25% of the screen) by default) +-- when <= 1 (0.25 (25% of the screen) by default) -- sticky - Visible on all tags, false by default -- screen - Screen (optional), mouse.screen by default ----------------------------------------------------------------- +------------------------------------------------------------------- -- Grab environment local pairs = pairs @@ -32,26 +33,31 @@ local capi = { screen = screen } --- Teardrop: Drop-down applications manager for the awesome window manager -module("teardrop") +-- Scratchdrop: drop-down applications manager for the awesome window manager +local drop = {} -- module scratch.drop + local dropdown = {} -- Create a new window for the drop-down application when it doesn't -- exist, or toggle between hidden and visible states when it does function toggle(prog, vert, horiz, width, height, sticky, screen) - local vert = vert or "top" - local horiz = horiz or "center" - local width = width or 0.9999 - local height = height or 0.25 - local sticky = sticky or false - local screen = screen or capi.mouse.screen + vert = vert or "top" + horiz = horiz or "center" + width = width or 1 + height = height or 0.25 + sticky = sticky or false + screen = screen or capi.mouse.screen + + -- Determine signal usage in this version of awesome + local attach_signal = client.connect_signal or client.add_signal + local detach_signal = client.disconnect_signal or client.remove_signal if not dropdown[prog] then dropdown[prog] = {} - -- Add unmanage signal for teardrop programs - capi.client.add_signal("unmanage", function (c) + -- Add unmanage signal for scratchdrop programs + attach_signal("unmanage", function (c) for scr, cl in pairs(dropdown[prog]) do if cl == c then dropdown[prog][scr] = nil @@ -64,14 +70,14 @@ function toggle(prog, vert, horiz, width, height, sticky, screen) spawnw = function (c) dropdown[prog][screen] = c - -- Teardrop clients are floaters + -- Scratchdrop clients are floaters awful.client.floating.set(c, true) -- Client geometry and placement local screengeom = capi.screen[screen].workarea - if width < 1 then width = screengeom.width * width end - if height < 1 then height = screengeom.height * height end + if width <= 1 then width = screengeom.width * width end + if height <= 1 then height = screengeom.height * height end if horiz == "left" then x = screengeom.x elseif horiz == "right" then x = screengeom.width - width @@ -91,18 +97,18 @@ function toggle(prog, vert, horiz, width, height, sticky, screen) c:raise() capi.client.focus = c - capi.client.remove_signal("manage", spawnw) + detach_signal("manage", spawnw) end -- Add manage signal and spawn the program - capi.client.add_signal("manage", spawnw) + attach_signal("manage", spawnw) awful.util.spawn(prog, false) else -- Get a running client c = dropdown[prog][screen] -- Switch the client to the current workspace - if c:isvisible() == false then c.hidden = true; + if c:isvisible() == false then c.hidden = true awful.client.movetotag(awful.tag.selected(screen), c) end @@ -117,7 +123,7 @@ function toggle(prog, vert, horiz, width, height, sticky, screen) else -- Hide and detach tags if not c.hidden = true local ctags = c:tags() - for i, v in pairs(ctags) do + for i, t in pairs(ctags) do ctags[i] = nil end c:tags(ctags) @@ -125,4 +131,4 @@ function toggle(prog, vert, horiz, width, height, sticky, screen) end end -setmetatable(_M, { __call = function(_, ...) return toggle(...) end }) +return setmetatable(drop, { __call = function(_, ...) return toggle(...) end }) diff --git a/scratch/init.lua b/scratch/init.lua new file mode 100644 index 0000000..f3b3e7e --- /dev/null +++ b/scratch/init.lua @@ -0,0 +1,14 @@ +--------------------------------------------------------------- +-- Drop-down applications and scratchpad manager for awesome wm +--------------------------------------------------------------- +-- Coded by: * Adrian C. (anrxc) +-- Licensed under the WTFPL version 2 +-- * http://sam.zoy.org/wtfpl/COPYING +--------------------------------------------------------------- + +local scratch = {} -- module scratch + +scratch.pad = require("scratch.pad") +scratch.drop = require("scratch.drop") + +return scratch diff --git a/scratch/pad.lua b/scratch/pad.lua new file mode 100644 index 0000000..1208aab --- /dev/null +++ b/scratch/pad.lua @@ -0,0 +1,137 @@ +--------------------------------------------------------------- +-- Basic scratchpad manager for the awesome window manager +--------------------------------------------------------------- +-- Coded by: * Adrian C. (anrxc) +-- Licensed under the WTFPL version 2 +-- * http://sam.zoy.org/wtfpl/COPYING +--------------------------------------------------------------- +-- To use this module add: +-- local scratch = require("scratch") +-- to the top of your rc.lua, and call: +-- scratch.pad.set(c, width, height, sticky, screen) +-- from a clientkeys binding, and: +-- scratch.pad.toggle(screen) +-- from a globalkeys binding. +-- +-- Parameters: +-- c - Client to scratch or un-scratch +-- width - Width in absolute pixels, or width percentage +-- when <= 1 (0.50 (50% of the screen) by default) +-- height - Height in absolute pixels, or height percentage +-- when <= 1 (0.50 (50% of the screen) by default) +-- sticky - Visible on all tags, false by default +-- screen - Screen (optional), mouse.screen by default +--------------------------------------------------------------- + +-- Grab environment +local pairs = pairs +local awful = require("awful") +local capi = { + mouse = mouse, + client = client, + screen = screen +} + +-- Scratchpad: basic scratchpad manager for the awesome window manager +local pad = {} -- module scratch.pad + + +local scratchpad = {} + +-- Toggle a set of properties on a client. +local function toggleprop(c, prop) + c.ontop = prop.ontop or false + c.above = prop.above or false + c.hidden = prop.hidden or false + c.sticky = prop.stick or false + c.skip_taskbar = prop.task or false +end + +-- Scratch the focused client, or un-scratch and tile it. If another +-- client is already scratched, replace it with the focused client. +function pad.set(c, width, height, sticky, screen) + width = width or 0.50 + height = height or 0.50 + sticky = sticky or false + screen = screen or capi.mouse.screen + + -- Determine signal usage in this version of awesome + local attach_signal = capi.client.add_signal or capi.client.connect_signal + local detach_signal = capi.client.remove_signal or capi.client.disconnect_signal + + local function setscratch(c) + -- Scratchpad is floating and has no titlebar + awful.client.floating.set(c, true); awful.titlebar.remove(c) + + -- Scratchpad client properties + toggleprop(c, {ontop=true, above=true, task=true, stick=sticky}) + + -- Scratchpad geometry and placement + local screengeom = capi.screen[screen].workarea + if width <= 1 then width = screengeom.width * width end + if height <= 1 then height = screengeom.height * height end + + c:geometry({ -- Scratchpad is always centered on screen + x = screengeom.x + (screengeom.width - width) / 2, + y = screengeom.y + (screengeom.height - height) / 2, + width = width, height = height + }) + + -- Scratchpad should not loose focus + c:raise(); capi.client.focus = c + end + + -- Prepare a table for storing clients, + if not scratchpad.pad then scratchpad.pad = {} + -- add unmanage signal for scratchpad clients + attach_signal("unmanage", function (c) + for scr, cl in pairs(scratchpad.pad) do + if cl == c then scratchpad.pad[scr] = nil end + end + end) + end + + -- If the scratcphad is emtpy, store the client, + if not scratchpad.pad[screen] then + scratchpad.pad[screen] = c + -- then apply geometry and properties + setscratch(c) + else -- If a client is already scratched, + local oc = scratchpad.pad[screen] + -- unscratch, and compare it with the focused client + awful.client.floating.toggle(oc); toggleprop(oc, {}) + -- If it matches clear the table, if not replace it + if oc == c then scratchpad.pad[screen] = nil + else scratchpad.pad[screen] = c; setscratch(c) end + end +end + +-- Move the scratchpad to the current workspace, focus and raise it +-- when it's hidden, or hide it when it's visible. +function pad.toggle(screen) + screen = screen or capi.mouse.screen + + -- Check if we have a client on storage, + if scratchpad.pad and + scratchpad.pad[screen] ~= nil + then -- and get it out, to play + local c = scratchpad.pad[screen] + + -- If it's visible on another tag hide it, + if c:isvisible() == false then c.hidden = true + -- and move it to the current worskpace + awful.client.movetotag(awful.tag.selected(screen), c) + end + + -- Focus and raise if it's hidden, + if c.hidden then + awful.placement.centered(c) + c.hidden = false + c:raise(); capi.client.focus = c + else -- hide it if it's not + c.hidden = true + end + end +end + +return pad diff --git a/signals.lua b/signals.lua index 8f5f0c2..8c599de 100644 --- a/signals.lua +++ b/signals.lua @@ -1,12 +1,9 @@ +local awful = awful +local beautiful = beautiful --- {{{ Signals --- Signal function to execute when a new client appears. -client.add_signal("manage", function (c, startup) - -- Add a titlebar - -- awful.titlebar.add(c, { modkey = modkey }) - +client.connect_signal("manage", function (c, startup) -- Enable sloppy focus - c:add_signal("mouse::enter", function(c) + c:connect_signal("mouse::enter", function(c) if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier and awful.client.focus.filter(c) then client.focus = c @@ -24,8 +21,45 @@ client.add_signal("manage", function (c, startup) awful.placement.no_offscreen(c) end end + + local titlebars_enabled = false + if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then + -- Widgets that are aligned to the left + local left_layout = wibox.layout.fixed.horizontal() + left_layout:add(awful.titlebar.widget.iconwidget(c)) + + -- Widgets that are aligned to the right + local right_layout = wibox.layout.fixed.horizontal() + right_layout:add(awful.titlebar.widget.floatingbutton(c)) + right_layout:add(awful.titlebar.widget.maximizedbutton(c)) + right_layout:add(awful.titlebar.widget.stickybutton(c)) + right_layout:add(awful.titlebar.widget.ontopbutton(c)) + right_layout:add(awful.titlebar.widget.closebutton(c)) + + -- The title goes in the middle + local title = awful.titlebar.widget.titlewidget(c) + title:buttons(awful.util.table.join( + awful.button({ }, 1, function() + client.focus = c + c:raise() + awful.mouse.client.move(c) + end), + awful.button({ }, 3, function() + client.focus = c + c:raise() + awful.mouse.client.resize(c) + end) + )) + + -- Now bring it all together + local layout = wibox.layout.align.horizontal() + layout:set_left(left_layout) + layout:set_right(right_layout) + layout:set_middle(title) + + awful.titlebar(c):set_widget(layout) + end end) -client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end) -client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) --- }}} +client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) +client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) diff --git a/tags.lua b/tags.lua index 643730e..d6a8d37 100644 --- a/tags.lua +++ b/tags.lua @@ -1,21 +1,60 @@ +-- tags and layouts +local awful = awful +local conf = conf +local modkey = conf.modkey or "Mod4" --- {{{ Tags -tags={} -tags.setup = { - { name = "1:⚙", layout = layouts[1] }, +local tags={ mt={} } +local layouts = layouts + +local function funcViewOnly(i) + return function () + local screen = mouse.screen + if tags[screen][i] then + awful.tag.viewonly(tags[screen][i]) + end + end +end + +local function funcViewToggle(i) + return function () + local screen = mouse.screen + if tags[screen][i] then + awful.tag.viewtoggle(tags[screen][i]) + end + end +end + +local function funcMoveTo(i) + return function () + if client.focus and tags[client.focus.screen][i] then + awful.client.movetotag(tags[client.focus.screen][i]) + end + end +end + +local function funcToggle(i) + return function () + if client.focus and tags[client.focus.screen][i] then + awful.client.toggletag(tags[client.focus.screen][i]) + end + end +end + +local defaultsetup = { + {"1:⚙"}, { name = "2:⌘", layout = layouts[5] }, { name = "3:☻", layout = layouts[3], mwfact = 0.20 }, { name = "4:✉", layout = layouts[5] }, - { name = "5:☑", layout = layouts[1] }, - { name = "6:♫", layout = layouts[1] }, - { name = "7:☣", layout = layouts[1] }, - { name = "8:☕", layout = layouts[1] }, - { name = "9:⚂", layout = layouts[1] }, - { name = "0:☠", layout = layouts[1] }, - { name = "F1:☭", layout = layouts[1] }, - { name = "F2:♚", layout = layouts[1] }, - { name = "F3:♛", layout = layouts[1] }, - { name = "F4:♜", layout = layouts[1] }--, + {"5:☑"}, + {"6:♫"}, + {"7:☣"}, + {"8:☕"}, + {"9:⚂"}, + {"0:☠"}, + {"F1:☭"}, + {"F2:♚"}, + {"F3:♛"}, + {"F4:♜"}--, -- { name = "F5:♝", layout = layouts[1] }, -- { name = "F6:♞", layout = layouts[1] }, -- { name = "F7:♟", layout = layouts[1] }, @@ -26,15 +65,54 @@ tags.setup = { -- { name = "F12:⚙", layout = layouts[1] } } -for s = 1, screen.count() do - tags[s] = {} - for i, t in ipairs(tags.setup) do - tags[s][i] = tag({ name = t.name }) - tags[s][i].screen = s - awful.tag.setproperty(tags[s][i], "layout", t.layout) - awful.tag.setproperty(tags[s][i], "mwfact", t.mwfact) - awful.tag.setproperty(tags[s][i], "hide", t.hide) - end - tags[s][1].selected = true +local list = {} + +function tags.setup(setuptable) + local setup = setuptable or defaultsetup + for s = 1, screen.count() do + list[s] = {} + for i, t in ipairs(setup) do + local layout = t.layout or layouts[1] + local name = t.name or t[1] + list[s][i] = awful.tag.new({name}, s, layout)[1]; + list[s][i].selected = false + if(t.mwfact) then + awful.tag.setmwfact(t.mwfact,list[s][i]) + end + end + list[s][1].selected = true + end end --- }}} + +function tags.extend_key_table(globalkeys) + -- Compute the maximum number of digit we need, limited to 22 + keynumber = 0 + for s = 1, screen.count() do + keynumber = math.min(22, math.max(#(list[s]), keynumber)); + end + + local inspect = require("inspect") + local tagkeys = globalkeys or {} + + -- Bind all key numbers to tags, using keycodes + for i = 1, keynumber do + if i < 10 then + k = "#" .. i + 9 -- number keys 1-9 + elseif i == 10 then + k = "#19" -- zero + elseif i > 10 then + 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)) + ) + end + return tagkeys; +end + +tags.mt.__index = list +tags.mt.__newindex = list +return setmetatable(tags, tags.mt) diff --git a/zenburn/theme.lua b/theme.lua similarity index 78% rename from zenburn/theme.lua rename to theme.lua index a567a08..8f1580c 100644 --- a/zenburn/theme.lua +++ b/theme.lua @@ -1,16 +1,7 @@ -------------------------------- --- "Zenburn" awesome theme -- --- By Adrian C. (anrxc) -- -------------------------------- - --- Alternative icon sets and widget icons: --- * http://awesome.naquadah.org/wiki/Nice_Icons - -- {{{ Main theme = {} -theme.wallpaper_cmd = { "awsetbg -l" } +theme.wallpaper = "~/.wallpaper" -- }}} - -- {{{ Styles theme.font = "dejavu 7" @@ -35,40 +26,6 @@ theme.titlebar_bg_focus = "#3F3F3F" theme.titlebar_bg_normal = "#3F3F3F" -- }}} --- There are other variable sets --- overriding the default one when --- defined, the sets are: --- [taglist|tasklist]_[bg|fg]_[focus|urgent] --- titlebar_[normal|focus] --- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color] --- Example: ---theme.taglist_bg_focus = "#CC9393" --- }}} - --- {{{ Widgets --- You can add as many variables as --- you wish and access them by using --- beautiful.variable in your rc.lua ---theme.fg_widget = "#AECF96" ---theme.fg_center_widget = "#88A175" ---theme.fg_end_widget = "#FF5656" ---theme.bg_widget = "#494B4F" ---theme.border_widget = "#3F3F3F" --- }}} - --- {{{ Mouse finder -theme.mouse_finder_color = "#CC9393" --- mouse_finder_[timeout|animate_timeout|radius|factor] --- }}} - --- {{{ Menu --- Variables set for theming the menu: --- menu_[bg|fg]_[normal|focus] --- menu_[border_color|border_width] -theme.menu_height = "15" -theme.menu_width = "100" --- }}} - -- {{{ Icons -- {{{ Taglist theme.taglist_squares_sel = "/usr/share/awesome/themes/zenburn/taglist/squarefz.png" diff --git a/vicious b/vicious index dcc2b60..c316528 160000 --- a/vicious +++ b/vicious @@ -1 +1 @@ -Subproject commit dcc2b60cd85dabd716e2bb8c49d9703f050eaff5 +Subproject commit c316528698906fe5ce92a20b4de5863b1c1ab31b diff --git a/wibox.lua b/wibox.lua deleted file mode 100644 index 607aec7..0000000 --- a/wibox.lua +++ /dev/null @@ -1,201 +0,0 @@ -function exists(filename) - local file = io.open(filename) - if file then - io.close(file) - return true - else - return false - end -end - - --- {{{ Reusable separators -spacer = widget({ type = "textbox", name = "spacer" }) -spacer.text = " " - -nullwidget = widget({ type = "textbox", name = "nullwidget" }) --- }}} - --- {{{ Wibox - ---popup run - --- Create a textclock widget ---clock = awful.widget.textclock({ align = "right" }) -mysystray = widget({ type = "systray" }) - -clock = widget({ type = "textbox" }) -vicious.register(clock, vicious.widgets.date, "%b %d, %R", 60) - - --- music widget {{{ -mpdwidget = widget({ type = "textbox" }) -vicious.register(mpdwidget, vicious.widgets.mpd, - function(widget, args) - if args["{state}"] == "N/A" then - return "" - else - return "[ ♫ "..args["{Artist}"].." - "..args["{Title}"].." ]" - end - end, 3, {nil, os.getenv("MPD_HOST"), os.getenv("MPD_PORT")}) -mpdwidget:buttons(awful.util.table.join( - awful.button({ }, 1, function () teardrop("urxvtc -e ncmpcpp","top","center", 0.99, 0.4)end ) - )) - -mpdnext = widget({ type = "textbox" }) -mpdnext.text = "▲" -mpdnext:buttons(awful.util.table.join( - awful.button({ }, 1, function () awful.util.spawn("mpc next") end) - )) -mpdprev = widget({ type = "textbox" }) -mpdprev.text = "▼" -mpdprev:buttons(awful.util.table.join( - awful.button({ }, 1, function () awful.util.spawn("mpc prev") end) - )) --- }}} - --- mail widget {{{ -mailwidget = widget({ type = "textbox" }) -vicious.register(mailwidget, vicious.widgets.mdir, - function(widget, args) - if args[1] > 0 then - naughty.notify({ - title = "New mail arrived", - text = "Unread "..args[2].." / New "..args[1], - position = "top_left" - - }) - widget.bg = theme.bg_urgent - widget.fg = theme.fg_urgent - elseif args[2] > 0 then - widget.bg = theme.bg_focus - widget.fg = theme.fg_focus - else - widget.bg = theme.bg_normal - widget.fg = theme.fg_normal - end - return "⬓⬓ Unread "..args[2].." / New "..args[1].. " " - end, 181, {os.getenv("HOME") .. "/.maildir/"}) ---}}} - --- battery {{{ -if exists("/sys/class/power_supply/BAT0") then - batwidget0 = widget({ type = "textbox" }) - vicious.register(batwidget0, vicious.widgets.bat, - function (widget, args) - if args[2] == 0 then return "" - else - if args[2] < 15 then - widget.bg = theme.bg_urgent - widget.fg = theme.fg_urgent - else - widget.bg = theme.bg_normal - widget.fg = theme.fg_normal - end - return "( BAT0: "..args[1]..args[2].."% - "..args[3].." )" - end - end, 61, "BAT0") -else batwidget0 = nullwidget end - -if exists("/sys/class/power_supply/BAT1") then - batwidget1 = widget({ type = "textbox" }) - vicious.register(batwidget1, vicious.widgets.bat, - function (widget, args) - if args[2] == 0 then return "" - else - if args[2] < 15 then - widget.bg = theme.bg_urgent - widget.fg = theme.fg_urgent - else - widget.bg = theme.bg_normal - widget.fg = theme.fg_normal - end - return "( BAT1: "..args[1]..args[2].."% - "..args[3].." )" - end - end, 61, "BAT1") -else batwidget1 = nullwidget end - -if exists("/sys/class/power_supply/BAT2") then - batwidget2 = widget({ type = "textbox" }) - vicious.register(batwidget2, vicious.widgets.bat, - function (widget, args) - if args[2] == 0 then return "" - else - if args[2] < 15 then - widget.bg = theme.bg_urgent - widget.fg = theme.fg_urgent - else - widget.bg = theme.bg_normal - widget.fg = theme.fg_normal - end - return "( BAT2: "..args[1]..args[2].."% - "..args[3].." )" - end - end, 61, "BAT2") -else batwidget2 = nullwidget end - ---}}} - -cpulabel = widget({ type = "textbox" }) -vicious.register(cpulabel, vicious.widgets.cpu, "CPU: $1%") - -if exists("/sys/class/net/wlan0") then - wlanwidget = widget({ type = "textbox" }) - vicious.register(wlanwidget, vicious.widgets.wifi, " )( WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, "wlan0") -else wlanwidget = nullwidget end - --- Create a wibox for each screen and add it -leftwibox = {} -rightwibox = {} - -mylayoutbox = {} -mytaglist = {} -mytaglist.buttons = awful.util.table.join( - awful.button({ }, 1, awful.tag.viewonly), - awful.button({ modkey }, 1, awful.client.movetotag), - awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ modkey }, 3, awful.client.toggletag), - awful.button({ }, 4, awful.tag.viewnext), - awful.button({ }, 5, awful.tag.viewprev) - ) - -for s = 1, screen.count() do - mylayoutbox[s] = awful.widget.layoutbox(s) - mylayoutbox[s]:buttons(awful.util.table.join( - awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), - awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), - awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), - awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) - -- Create a taglist widget - mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) - - - -- Create the wibox - leftwibox[s] = awful.wibox({ position = "left", screen = s, width = 18 }) - rightwibox[s] = awful.wibox({ position = "right", screen = s , width = 18}) - -- Add widgets to the wibox - order matters - leftwibox[s].widgets = { - mytaglist[s], - mylayoutbox[s], - mailwidget, - spacer, - layout = awful.widget.layout.horizontal.rightleft - } - rightwibox[s].widgets = { - { - clock, spacer, - batwidget0, - batwidget1, - batwidget2, - wlanwidget, - spacer, cpulabel, cpuwidget, - spacer, mpdwidget, mpdnext, spacer, mpdprev, - spacer, - layout = awful.widget.layout.horizontal.leftright - }, - separator, spacer, mysystray, - layout = awful.widget.layout.horizontal.leftright - } -end --- }}} --- --- vim:foldmethod=marker diff --git a/widgets.lua b/widgets.lua new file mode 100644 index 0000000..23638ea --- /dev/null +++ b/widgets.lua @@ -0,0 +1,266 @@ +local wibox = require("wibox") +local vicious = require("vicious") +local modkey = conf.modkey or "Mod4" + +local widgets = { add = {} } + +-------------------------------------------------------------------------------- +-- table declarations {{{ +-------------------------------------------------------------------------------- +local wlist = {} +local bars = {} +local leftwibox = {} +local rightwibox = {} + +local mytaglist = {} +mytaglist.buttons = awful.util.table.join( +awful.button({ }, 1, awful.tag.viewonly), +awful.button({ modkey }, 1, awful.client.movetotag), +awful.button({ }, 3, awful.tag.viewtoggle), +awful.button({ modkey }, 3, awful.client.toggletag), +awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end), +awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end) +) +-- }}} +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- setup {{{ +-------------------------------------------------------------------------------- +local function setup() -- {{{ + for s = 1, screen.count() do + wlist[s]={} + bars[s]={} + + + + -- Create the wibox + leftwibox[s] = awful.wibox({ + position = "left", + screen = s, + width = 18 + }) + rightwibox[s] = awful.wibox({ + position = "right", + screen = s, + width = 18 + }) + + -- {{{ create layouts + local left_bottom_layout = wibox.layout.fixed.horizontal() + local left_top_layout = wibox.layout.fixed.horizontal() + + local left_layout = wibox.layout.align.horizontal() + left_layout:set_left(left_bottom_layout) + left_layout:set_right(left_top_layout) + + local right_bottom_layout = wibox.layout.fixed.horizontal() + local right_top_layout = wibox.layout.fixed.horizontal() + + local right_layout = wibox.layout.align.horizontal() + right_layout:set_left(right_top_layout) + right_layout:set_right(right_bottom_layout) + --}}} + + + -- {{{ rotate layouts and add to wibox + local leftrotate = wibox.layout.rotate() + leftrotate:set_direction('east') + leftrotate:set_widget(left_layout) + leftwibox[s]:set_widget(leftrotate) + + local rightrotate = wibox.layout.rotate() + rightrotate:set_direction('west') + rightrotate:set_widget(right_layout) + rightwibox[s]:set_widget(rightrotate) + --}}} + + + bars[s] = {} + bars[s].left = {} + bars[s].left.bottom = left_bottom_layout + bars[s].left.top = left_top_layout + bars[s].right = {} + bars[s].right.bottom = right_bottom_layout + bars[s].right.top = right_top_layout + end +end -- }}} +widgets.setup = setup + +-- }}} +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Utility {{{ +-------------------------------------------------------------------------------- + +-- force update of a widget +local function update(widgetname, index) -- {{{ + for s = 1, screen.count() do + if wlist[s] ~= nil and wlist[s][widgetname] ~= nil then + if index ~= nil then + vicious.force({ wlist[s][widgetname][index] }) + else + vicious.force({ wlist[s][widgetname] }) + end + end + end +end +--}}} +widgets.update = update + +-- get layout for adding widgets +local function get_layout(screen, bar, align) --{{{ + if bars[screen][bar] == nil then return nil end + + return bars[screen][bar][align] +end --}}} +widgets.layout = get_layout + +-- }}} +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- widget creators {{{ +-------------------------------------------------------------------------------- + +-- mail widget +local function mailwidget(screen, parent_layout, mailboxes) --{{{ + local widget = wibox.widget.textbox() + local bg = wibox.widget.background() + bg:set_widget(widget) + vicious.register(widget, vicious.widgets.mdir, function(widget, args) + if args[1] > 0 then + naughty.notify({ + title = "New mail arrived", + text = "Unread "..args[2].." / New "..args[1], + position = "top_left" + + }) + bg:set_bg(theme.bg_urgent) + bg:set_fg(theme.fg_urgent) + elseif args[2] > 0 then + bg:set_bg(theme.bg_focus) + bg:set_fg(theme.fg_focus) + else + bg:set_bg(theme.bg_normal) + bg:set_fg(theme.fg_normal) + end + return "⬓⬓ Unread "..args[2].." / New "..args[1].. " " + end, 0, mailboxes) + wlist[screen]["mail"] = widget + parent_layout:add(bg) + widgets.update("mail") +end +--}}} +widgets.add.mail = mailwidget + +-- text clock +local function clockwidget(screen, parent_layout) -- {{{ + wlist[screen]["clock"] = awful.widget.textclock() + parent_layout:add(wlist[screen]["clock"]) +end +--}}} +widgets.add.clock = clockwidget + +-- layoutbox +local function layoutwidget(screen, parent_layout) -- {{{ + wlist[screen]["layout"] = awful.widget.layoutbox(s) + parent_layout:add(wlist[screen]["layout"]) +end +--}}} +widgets.add.layout = layoutwidget + +-- taglist +local function taglistwidget(screen, parent_layout) --{{{ + -- Create a taglist widget + wlist[screen]["taglist"] = awful.widget.taglist(screen, + awful.widget.taglist.filter.all, + mytaglist.buttons) + parent_layout:add(wlist[screen]["taglist"]) +end --}}} +widgets.add.taglist = taglistwidget + +-- system tray +local function systraywidget(screen, parent_layout) --{{{ + if (wlist["systray"] ~= nil) then + return + end + wlist["systray"] = wibox.widget.systray() + parent_layout:add(wlist["systray"]) +end --}}} +widgets.add.systray = systraywidget + +-- cpu usage +local function cpuwidget(screen, parent_layout) --{{{ + wlist[screen]["cpu"] = wibox.widget.textbox() + vicious.register(wlist[screen]["cpu"], vicious.widgets.cpu, "CPU: $1%") + parent_layout:add(wlist[screen]["cpu"]) +end --}}} +widgets.add.cpu = cpuwidget + +-- battery +local function batterywidget(screen, parent_layout, batname) --{{{ + if(wlist[screen]["bat"] == nil) then + wlist[screen]["bat"] = {} + end + -- more than one batwidget is possible + local batwidget = wibox.widget.textbox() + local bg = wibox.widget.background() + bg:set_widget(batwidget) + table.insert(wlist[screen]["bat"], batwidget) + vicious.register(batwidget, vicious.widgets.bat, function (widget, args) + if args[2] == 0 then return "" + else + if args[2] < 15 then + bg:set_bg(theme.bg_urgent) + bg:set_fg(theme.fg_urgent) + else + bg:set_bg(theme.bg_normal) + bg:set_fg(theme.fg_normal) + end + return batname .. ": " .. + args[1]..args[2].."% - "..args[3] + end + end, 61, batname) + parent_layout:add(bg) +end --}}} +widgets.add.battery = batterywidget + +-- wireless status +local function wifiwidget(screen, parent_layout, interface) --{{{ + wlist[screen]["wifi"] = wibox.widget.textbox() + vicious.register(wlist[screen]["wifi"], vicious.widgets.wifi, + "WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, interface) + parent_layout:add(wlist[screen]["wifi"]) +end --}}} +widgets.add.wifi = wifiwidget + +-- }}} +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- spacers {{{ +-------------------------------------------------------------------------------- + +local spacer = wibox.widget.textbox() +spacer:set_text(" ") + +-- manual spacing between widgets +local function spacerwidget(parent_layout) --{{{ + parent_layout:add(spacer) +end --}}} +widgets.add.spacer = spacerwidget + +-- change appearance of spacers +local function spacertext(text) --{{{ + spacer:set_text(text) +end --}}} +widgets.set_spacer_text = spacertext + +-- }}} +-------------------------------------------------------------------------------- + +return widgets + +-- vim:foldmethod=marker diff --git a/zenburn/awesome-icon.png b/zenburn/awesome-icon.png deleted file mode 100644 index 70978d3a9ab338be0eea2a024641cdaa8709c6be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;V{wqX6T`Z5GB1G~wg8_H*X3p^r=fd*d(VMZs7*%d%R_7YED zSN5A6vSR!a&v#bL2MURMx;Tb#Tu=V-e?Ft6;fcis^$a_|PZVTWUoKPaxOk%oPzi&l LtDnm{r-UW|Qr9nc diff --git a/zenburn/layouts/dwindle.png b/zenburn/layouts/dwindle.png deleted file mode 100644 index 1aa4bf269b41c581ec919efe091aa2e1964c13d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaoxV* z@SQtn-bPC+fuu`<{DK)Ap4~_Tagw~FdgVlS5WS$5h_C{V7mL%hSa%MB{vN!U5hV|Ns9F2I79fV-3G$`4|85|J%=)a3J@1 e%7rUscNiF2R>v5*|DOSJ34^DrpUXO@geCy*Q9Zr@ diff --git a/zenburn/layouts/fairh.png b/zenburn/layouts/fairh.png deleted file mode 100644 index e176bb36345cd5932a19db8ec67c01d26f98c8d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaoxV* z^PM|qWD6cQgQQD>{DK)Ap4~_Tagw~FdgVlS5XNNoiVaq9ssB)zif>MB{vN!U5hV|Lgz!-~a!Ae<0gNo;{5}|NH-~-|%SR c@dLaJ%L6lQ?oFxg25MmNboFyt=akR{0OxZ%egFUf diff --git a/zenburn/layouts/fairv.png b/zenburn/layouts/fairv.png deleted file mode 100644 index 7c0a92c516623a0717403c0342eb64d30710d367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaoui_ zaOch$W8tt_AnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;pmbi_8fn@Xjk0Ja8 bYZw@!O3Hq1QJvWj)WYED>gTe~DWM4fu*@{c diff --git a/zenburn/layouts/floating.png b/zenburn/layouts/floating.png deleted file mode 100644 index a39909245bd1ac2243982ffa2b0312827f893ddb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaoxUQ z@|`K++{ae!&b5&u*lFI7!~_E({&4vK~MVXMsm#F#`j)FbFd;%$g$s6l5>) z^mS#w$ssE$CQ@1$G;{y} diff --git a/zenburn/layouts/fullscreen.png b/zenburn/layouts/fullscreen.png deleted file mode 100644 index a0c795c5eecfc21de62537d2bdfa123e5bbe6c70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaoxV* z@SQtn-bPC+fuu`<{DK)Ap4~_Tagw~FdgVlS5XVMefa;yfC1UuBVG*h{pNkgaf=!{x=`w50aFZkoZw(V0Y*WkJ&Ny3FRA& k+1Ae1Oqn3Cd@jRF%}28J29*~C-V}>VGHmHaov7{ z{mz{;d(GnhgQQD>{DK)Ap4~_Tagw~FdgVlS5XNjWez{wiYO)>gnPbqH#Vs;Q;TG|IG*ar3~sC&K^I@jRF%}28J29*~C-V}>VGHmHaoxUw z`Ocj)v&FuufTT-;{DK)Ap4~_Tagw~FdgVlS5Wih4n*cco|Tr%G1R$MB{wv#f^du1{|yxO3o!L&c2n(YaO;ZnKjelg3^Tg zOHb~qs<1@;?mv2O2irCN=LfDOUrkO}-f)Lg<^d09KwH(mZ# N!PC{xWt~$(696SfVQByW diff --git a/zenburn/layouts/spiral.png b/zenburn/layouts/spiral.png deleted file mode 100644 index 8f5aeedefc43f941a439e34d066824427173f820..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaot`K zedo>@pHqd!AnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n(~sDfJX&22WQ%mvv4FO#o8EH@pA< diff --git a/zenburn/layouts/tile.png b/zenburn/layouts/tile.png deleted file mode 100644 index 3fcc904db6c3a0013be72c2da405b8a533cf55c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaowKr z?arMuleN_~LDD5be!&b5&u*lFI7!~_E({&4vK~MVXMsm#F#`j)FbFd;%$g$s6l5>) z^mS#w$ssFZ%+RvPHv%Z6?CIhdqH#Vs;Q;TG|Ns971989O$%fqmlMOTO+N8+#OEWOA X)~DCGakJP1l{0v{`njxgN@xNAfJ`)p diff --git a/zenburn/layouts/tilebottom.png b/zenburn/layouts/tilebottom.png deleted file mode 100644 index dfe783228f50886eff0fb332c904541727419cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaoxV7 z`p%s*tZ&Vxfuu`<{DK)Ap4~_Tagw~FdgVlS5X-L_0lR={`_M!PCVtMB{vN!U5hV|Ch3=A52 WW$z2bXMY8%W$<+Mb6Mw<&;$VH8#A^5 diff --git a/zenburn/layouts/tileleft.png b/zenburn/layouts/tileleft.png deleted file mode 100644 index c5decfd598313bbb31f396704e5a194ba5622834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaoygr z`Ocj);-(%yLDD5be!&b5&u*lFI7!~_E({&4vK~MVXMsm#F#`j)FbFd;%$g$s6l5>) z^mS#w$ssFZY_O=h_6tx*$4J&v!RDZZ_^!@v;q WH@a`>(dN5A)eN4lelF{r5}E+$PdQEi diff --git a/zenburn/layouts/tiletop.png b/zenburn/layouts/tiletop.png deleted file mode 100644 index b2516612e2c7ad8d1e84f578c1216d21e855b44c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaot{E zeCN)YCXJ_YAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;FWt W%ibU7zH21s-{g?zlvlA&x9SH9@p-y9hHzX@{&9ezv4WAIei`$@dp5^GwlR3R`njxgN@xNA DFNrJj diff --git a/zenburn/taglist/squarez.png b/zenburn/taglist/squarez.png deleted file mode 100644 index 9b41c26ea753665cfd295ef36083dd55e6f4ae71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&G$P6TV-`L3kDaPU;cPEB*=VV?2IcxzwA+Fmu zT)uPX%w8v-y&&n5AirP+hi5m^K%69RcNc~ZR#^`qhqJ&VvY3H^?+6GpPSxg<1`4v5 zc>21s-{g?zRA4@|dFc(Hkf5iFV+hCf9bP0 Hl+XkKo;)j; diff --git a/zenburn/titlebar/close_focus.png b/zenburn/titlebar/close_focus.png deleted file mode 100644 index 02565b9e079f2d78f486dc3b8d4953d7a047c88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G^recZx~4727)00r4gJbhi+Z*s_Us4*Z)1-m%})6!oGr!7tpdBDI>DJJ&(Zh~F~(0B$lQ^6F6 zGQl&g^Y`yLo+%L;d#uTu>8@)D|K>mgt^x)ICtb0}dvEzX0-CN`;u=wsl30>zm0Xkx zq!^403=MP*%yf-RLJTde3{0&IEwv4dtPBiHxBX#7(U6;;l9^Ts)nKY?Xb@s(Vr6V; YWoi!5u$F!P0iXs3Pgg&ebxsLQ06INtH2?qr diff --git a/zenburn/titlebar/floating_focus_active.png b/zenburn/titlebar/floating_focus_active.png deleted file mode 100644 index 63d900ba70c29dd192fbda129815e4c1d1e78d4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G^recZx~4727)00r4gJbhi+Z*s_Us%cn+{+0s@1$nwShFF|V zPLN^#(uGSVX$e4Jv2E=$duC?l=BeS_%0T+?*4OEUQpa4xr`PV-FL%_{K%7g1 w&FIq6RGl3v7h+i+KW6q>oLL}pfsujX$TktN)t`f$fu=Kfy85}Sb4q9e0K<|!C;$Ke diff --git a/zenburn/titlebar/floating_focus_inactive.png b/zenburn/titlebar/floating_focus_inactive.png deleted file mode 100644 index f442d7863e1d5e05447b70db96ffbcd9ae3688b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRXEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR z+ueoXe|!I#{XiaPfk$L90|PhEK5k(~hFNnYK!Rljj_E)e>#}JM4 z$q5n@9l9O6AO8FQ`~OynEf-Q|oG{=`yY%<}_y3bqrMQib&z{(r_`06Mcjs+4MrLM) zPm}rDT_<0U1sb7R;u=wsl30>zm0Xkxq!^403=MP*%yf-RLJTde3{0&IEwv4dtPBiH xxBUTm5}_eCKP5A*5~{&e*U%uu(8S8v(#q5vqG2uj`~yG@44$rjF6*2UngHo_VA22p diff --git a/zenburn/titlebar/floating_normal_active.png b/zenburn/titlebar/floating_normal_active.png deleted file mode 100644 index 1355a55527934580d4bcce3aacd18bc05e0d2ce8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+Szh&W7L{Pk?;J;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4)5S5w z;&gI?1nXgTgGZAdJQYky0D>Kr3v7BD8yg+(E-V&fW@bM8T>pKc)G-(F>9*FF8y_jn z;9lyZmBzc~G@H#Cw}To77#YgE#kls(Wdb^qLAAs+q9i4;B-JXpC>2OC7#SEE=o*;m z8kvL`T38vFS{Yhu8yHy`7?^JR!-}FIH$NpatrDuiRM*fT#L&db*wV_>9HL<@`}_ky O4Gf;HelF{r5}E)Qt7Pc_ diff --git a/zenburn/titlebar/floating_normal_inactive.png b/zenburn/titlebar/floating_normal_inactive.png deleted file mode 100644 index e6731a33686be5d5f8c3a655d12f5b79e548ef6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRXEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR z+ueoXe|!I#{XiaPfk$L90|PhEK5k(~hFNnYK!Rljj_E)e>Tl-f9P{-rb!%IoQb5Gkx%o?61BHJQcsr!Ue8_J(8$POvYtzF7R&N}pgz?S z*NBpo#FA92P@Nx3<-T|Ap= pAa1D8F1fEDP0F`=>Sb-@O1TaS?83{1OWfqJ`Df> diff --git a/zenburn/titlebar/maximized_focus_inactive.png b/zenburn/titlebar/maximized_focus_inactive.png deleted file mode 100644 index 61cb93b3b726d24c607e1ba5bf906e06b8b85914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRXEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR z+ueoXe|!I#{XiaPfk$L90|PhEK5k(~hFNnYK!Rljj_E)e>f#YDT()t+?6+qR9M~{bFjjKnvW2^Nk11TwUChACz`*sI zjsMfnl^=lysFt`!l%yn~>+Ba;wA3o8RtD?>|d10yQ~1JiAP vKwd;>$jwj5Osj-yFx53Q2r)FVGPblbHHTUftDnm{r-UW|w((p? diff --git a/zenburn/titlebar/maximized_normal_active.png b/zenburn/titlebar/maximized_normal_active.png deleted file mode 100644 index ba5139abfcf1eedb14d84ccb174a36185ff80aee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+Szh&W7L{Pk?;J;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4o;1@A7L1X2eI zK0Ex>acaAGHq}7<;EWfE9?{c#n*tk{85p!4@q~2o6z2mCS1oakC`m~yNwrEYN(E93 zMh1okx&~&tMkXPK7FGtPR)&_^21Zr}2BzEou%c+l%}>cptAuJW)ipE-F*LC!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR z+ueoXe|!I#{XiaPfk$L90|PhEK5k(~hFNnYK!Rljj_E)e>_8JJob rnP?jrSs57IdN&K`DkOwa)|!*?77*hFF|V zPLN^#(vO0A+pt2$qYiW03bP0l+XkKe@il# diff --git a/zenburn/titlebar/ontop_focus_inactive.png b/zenburn/titlebar/ontop_focus_inactive.png deleted file mode 100644 index 3b8b5c33ce6d1c8c87dff15f33fbae3cf588f55d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRXEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR z+ueoXe|!I#{XiaPfk$L90|PhEK5k(~hFNnYK!Rljj_E)e>xe6E=^4(YkvdtX- z0yV3axJHzuB$lLFB^RXvDF!10Ljzp{GhHK-5JL+q15+zQOKk%qD+2@5ZGS-CLukm& pPsvQHglaI=H8cn@G_f+av@$h^XjscW{{T<}gQu&X%Q~loCIHS#RpLL5hW>!C8<`)MX5lF!N|bSK-a)b*T^Kq(89{V)XLCO z+rY@mz`%6dA666%x%nxXX_Zh7rn-g(A%-Sa#+Fv5<`4~Q+2bP0l+XkK DT5emy diff --git a/zenburn/titlebar/ontop_normal_inactive.png b/zenburn/titlebar/ontop_normal_inactive.png deleted file mode 100644 index 136f3f07d2181839cf5e0f361385fd956a18fc64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRXEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR z+ueoXe|!I#{XiaPfk$L90|PhEK5k(~hFNnYK!Rljj_E)e>SHpf`{- c-^a&iMxva`$v`46!(! zoFKt^nBCyfq#p(Kf9u(RKzqHI8<1*CzMb{Y*ucPmLxb(nmBTLL(=#)rl12BI{na^q kU{}t8!#N^7Ofn1%9!G?^9^W=m1sciV>FVdQ&MBb@07Ak!2><{9 diff --git a/zenburn/titlebar/sticky_focus_inactive.png b/zenburn/titlebar/sticky_focus_inactive.png deleted file mode 100644 index b83ceffde2cd803c049c4e41811aeb0f41344918..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRXEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR z+ueoXe|!I#{XiaPfk$L90|PhEK5k(~hFNnYK!Rljj_E)e>3O`~OynEfVkk@Bc3!+SX~oEHTkC%HvJ;lNoNY+k2Tz7#Nnh2rO{A^IZ$5 zQ?2OC7#SEE=o*;m8kvL`T38vFS{Yhu8yHy`7?^JR1M(X}LvDUb oW?CgwgQ>2eL5QJ=m9eFjsX0W$TK4$|fEpM)UHx3vIVCg!00?(m8UO$Q diff --git a/zenburn/titlebar/sticky_normal_active.png b/zenburn/titlebar/sticky_normal_active.png deleted file mode 100644 index 9b740568e587207f24e6b7dfa60aa8b6d14a418c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+Szh&W7L{Pk?;J;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4)5S5w z;&gI?1nXgTgGZAp%9bhjHa0do-d$KM#>~uo_$>3&OdcQzQWM==@G@~x_vwmCmW^HY z|31krPyAANv!VT_h6Jkx1B2WVVXjA$)&W@zswJ)wB`Jv|saDBFsX&Us$iUD**T78I z$Rxzj!pgwZ%Ft5Vz{twLz;xRmRum1n`6-!cl~4_)x`qZJh9*|VmR6?b5DjbD=N|xS OVDNPHb6Mw<&;$VK_+;(? diff --git a/zenburn/titlebar/sticky_normal_inactive.png b/zenburn/titlebar/sticky_normal_inactive.png deleted file mode 100644 index 0e2978084fdd2ecbe310b209f4ab25825480a56b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRXEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR z+ueoXe|!I#{XiaPfk$L90|PhEK5k(~hFNnYK!Rljj_E)e>Tr#}JM4 z$q5n@ANbswX%fd4*JhlVekmYzMu%~O;LO9_NB;TrWnL-0t>M7T;Cq(qOxoFfH-H*d zOI#yLQW8s2t&)pUffR$0fuVt}ftjw6Nr<6^m4T_1k%_i}k(GhLt#`A4K0wlto1c=I YR*74~>di{CfEpM)UHx3vIVCg!0Pd(-OaK4? diff --git a/zenburn/zenburn-background.png b/zenburn/zenburn-background.png deleted file mode 100644 index 1eb94375eafb437c55f76349fc20e9b75394244a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9477 zcmeAS@N?(olHy`uVBq!ia0y~yV4J|ez#_%L1{86bZXE`s7>k44ofy`glX(f`uqAoB zyD+R_*vl~ag-BW`P=vFFrU00r4gJbhi+Z*s_rnTsdPy!n-ZL4m>3 z#WAGf)|)$LeeVQFv|SXqYn5>Dp6?EEt_{n0o-i#FH-Ff6f^Crv*U!Ynqdw;{6V}D) z%hwi{|Nrsf6D!b2Ac(6qWrVQog@Dck0S-n^Fx?<9Dli%zqsd`3Hvn_NP%aE4)WGH0 zgKKNAcMJNZRaTiD>fGtT1Qt|aQ32BoP9syG4U)Qdl%Br4S@2)N-ngCv<$46meUuP= zz#O9hsY3*qfHf8fD2@n$!z^IW7OZ*t^5>TP==I|A9rJe(Oh!pFz`7Xvw#Ml%uQ>kc z%bVm6;UhEzG15!<_kMo;G)MqF=;a=|c@v(mesBA?`To3TPetBap0=+0E_d!Q>xjxE z7*RYb08ZZ2C?XAgAUWmu&Fxn?YOJ6k`-i)4jS*QU561#T>S4;VO2ZM~W`S3n z#%H?)f0PieGEuU}`x(!Ua;QIJ8VRj=X!EQg+2?Z-i=C>t2c(#2X@E3X95~Pgc!a?! z4j6vRH9e#c)YT$f+=xpthVBs|aOCda$A`NmAt71uco?K3cq9Jp?W`8znV{_Pd>D9( zj8QAf@{2X7a6UOgJCyKt?&Uoa53lZ9>-M0Z=z{sc+S|Z(%Lhin{Y~^Z{c-J_>}?A^ zmq3A*hE8XrC&rvNG-8IdZ1PDjj0eroFswmyd+zbPmXkWK(^^LAFfX)Le(+oO z^|!}wZORUR(1uRx>8afL&{>nn4vuZij=+d$%H!?_jd~xPE=UNVJMYdPKg|OvJN69W zHZZi{Z^#D~{A!!m%obD|B4Y)&Ygvkb>kBGDYXN}qK$F?~jzq|8*^YCY^4uOgCfxFX z)uZc*fx%g~aR>z`g+U1GN@fGA9~Qewgl8~dMYR;LP4|%h^e)N7q#;}dqj%J((l*#} ocYgnL*vQN1xD>ds9W+( Date: Mon, 15 Apr 2013 14:27:38 +0200 Subject: [PATCH 3/8] created logging module --- rc.lua | 7 +++++ simplelog.lua | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 simplelog.lua diff --git a/rc.lua b/rc.lua index 3183d93..c2573cf 100644 --- a/rc.lua +++ b/rc.lua @@ -11,6 +11,13 @@ conf = require("localconf") layouts = require('layouts') +-- {{{ Logging +log = require("simplelog") +log.add_logger(log.loggers.stdio, 0) +log.add_logger(log.loggers.naughty, 2) + +-- }}} + -- {{{ Tags tags = require('tags') diff --git a/simplelog.lua b/simplelog.lua new file mode 100644 index 0000000..6526689 --- /dev/null +++ b/simplelog.lua @@ -0,0 +1,81 @@ +local naughty = require("naughty") + +local simplelog = { loggers = {}, mt = {}} + +local defaults = {} +local settings = {} + +defaults.loggers = { } +defaults.defaultlevel = 0 + +for key, value in pairs(defaults) do + settings[key] = value +end + +level = { + ERROR = 3, + WARNING = 2, + NORMAL = 1, + DEBUG = 0 +} +simplelog.level = level + +function loglv(msg, level) + for _,logger in ipairs(settings.loggers) do + logger(msg, level) + end +end + +function debug(msg) + loglv(msg, 0) +end +simplelog.debug = debug + +function log(msg) + loglv(msg, 1) +end +simplelog.log = log + +function warn(msg) + loglv(msg, 2) +end +simplelog.warn = warn + +function error(msg) + loglv(msg, 3) +end +simplelog.error = error + +function add_logger(logger, level) + if level == nil then + level = settings.defaultlevel + end + print(inspect(logger)) + table.insert(settings.loggers, function(msg, severity) + if severity >= level then + logger(msg, severity) + end + end) + print(inspect(settings.loggers)) +end +simplelog.add_logger = add_logger + +function logger_naughty(msg, severity) + if severity == level.WARNING then + msg = "".. msg .. "" + elseif severity == level.ERROR then + msg = "".. msg .. "" + end + naughty.notify({ text = msg }) +end +simplelog.loggers.naughty = logger_naughty + + +function logger_print(msg, severity) + print(msg) +end +simplelog.loggers.stdio = logger_print + +simplelog.mt.__call = log + +return setmetatable(simplelog, simplelog.mt) From ba5d63eebd2d1319b6a2e1540eeb012a8408b20b Mon Sep 17 00:00:00 2001 From: crater2150 Date: Mon, 15 Apr 2013 14:30:23 +0200 Subject: [PATCH 4/8] modules refactored --- rc.lua | 16 +++++++++------- widgets.lua | 53 ++++++++++++++++++++++++++--------------------------- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/rc.lua b/rc.lua index c2573cf..64f938f 100644 --- a/rc.lua +++ b/rc.lua @@ -33,20 +33,22 @@ for s = 1, screen.count() do local lbottom = widgets.layout(s,"left","bottom") -- {{{ - widgets.add.mail(s, ltop, { os.getenv("HOME") .. "/.maildir/" }) + widgets.add.mail("mail_me", s, ltop, { os.getenv("HOME") .. "/.maildir/me" }) widgets.add.spacer(ltop) - widgets.add.clock(s, ltop) + widgets.add.mail("mail_uber", s, ltop, { os.getenv("HOME") .. "/.maildir/uber" }) + widgets.add.spacer(ltop) + widgets.add.clock("clock", s, ltop) widgets.add.layout(s, lbottom) - widgets.add.taglist(s, lbottom) + widgets.add.taglist("tags", s, lbottom) - widgets.add.cpu(s, rtop) + widgets.add.cpu("cpu", s, rtop) widgets.add.spacer(rtop) - widgets.add.battery(s, rtop, "BAT0") + widgets.add.battery("bat", s, rtop, "BAT0") widgets.add.spacer(rtop) - widgets.add.battery(s, rtop, "BAT1") + widgets.add.battery("slice", s, rtop, "BAT1") widgets.add.spacer(rtop) - widgets.add.wifi(s, rtop, "wlan0") + widgets.add.wifi("wlan", s, rtop, "wlan0") widgets.add.spacer(rtop) widgets.add.systray(s, rtop) diff --git a/widgets.lua b/widgets.lua index 23638ea..c1ccffc 100644 --- a/widgets.lua +++ b/widgets.lua @@ -125,7 +125,7 @@ widgets.layout = get_layout -------------------------------------------------------------------------------- -- mail widget -local function mailwidget(screen, parent_layout, mailboxes) --{{{ +local function mailwidget(name, screen, parent_layout, mailboxes) --{{{ local widget = wibox.widget.textbox() local bg = wibox.widget.background() bg:set_widget(widget) @@ -148,17 +148,17 @@ local function mailwidget(screen, parent_layout, mailboxes) --{{{ end return "⬓⬓ Unread "..args[2].." / New "..args[1].. " " end, 0, mailboxes) - wlist[screen]["mail"] = widget + wlist[screen][name] = widget parent_layout:add(bg) - widgets.update("mail") + widgets.update(name) end --}}} widgets.add.mail = mailwidget -- text clock -local function clockwidget(screen, parent_layout) -- {{{ - wlist[screen]["clock"] = awful.widget.textclock() - parent_layout:add(wlist[screen]["clock"]) +local function clockwidget(name, screen, parent_layout) -- {{{ + wlist[screen][name] = awful.widget.textclock() + parent_layout:add(wlist[screen][name]) end --}}} widgets.add.clock = clockwidget @@ -172,16 +172,17 @@ end widgets.add.layout = layoutwidget -- taglist -local function taglistwidget(screen, parent_layout) --{{{ +local function taglistwidget(name, screen, parent_layout) --{{{ -- Create a taglist widget - wlist[screen]["taglist"] = awful.widget.taglist(screen, + wlist[screen][name] = awful.widget.taglist(screen, awful.widget.taglist.filter.all, mytaglist.buttons) - parent_layout:add(wlist[screen]["taglist"]) + parent_layout:add(wlist[screen][name]) end --}}} widgets.add.taglist = taglistwidget -- system tray +-- not using a name argument, because only one systray is allowed local function systraywidget(screen, parent_layout) --{{{ if (wlist["systray"] ~= nil) then return @@ -192,24 +193,20 @@ end --}}} widgets.add.systray = systraywidget -- cpu usage -local function cpuwidget(screen, parent_layout) --{{{ - wlist[screen]["cpu"] = wibox.widget.textbox() - vicious.register(wlist[screen]["cpu"], vicious.widgets.cpu, "CPU: $1%") - parent_layout:add(wlist[screen]["cpu"]) +local function cpuwidget(name, screen, parent_layout) --{{{ + wlist[screen][name] = wibox.widget.textbox() + vicious.register(wlist[screen][name], vicious.widgets.cpu, "CPU: $1%") + parent_layout:add(wlist[screen][name]) end --}}} widgets.add.cpu = cpuwidget -- battery -local function batterywidget(screen, parent_layout, batname) --{{{ - if(wlist[screen]["bat"] == nil) then - wlist[screen]["bat"] = {} - end - -- more than one batwidget is possible - local batwidget = wibox.widget.textbox() +local function batterywidget(name, screen, parent_layout, batname) --{{{ + local widget = wibox.widget.textbox() local bg = wibox.widget.background() - bg:set_widget(batwidget) - table.insert(wlist[screen]["bat"], batwidget) - vicious.register(batwidget, vicious.widgets.bat, function (widget, args) + print("creating batwidget '" .. name .. "' for battery '"..batname.."'") + bg:set_widget(widget) + vicious.register(widget, vicious.widgets.bat, function (widget, args) if args[2] == 0 then return "" else if args[2] < 15 then @@ -219,20 +216,22 @@ local function batterywidget(screen, parent_layout, batname) --{{{ bg:set_bg(theme.bg_normal) bg:set_fg(theme.fg_normal) end - return batname .. ": " .. + return name .. ": " .. args[1]..args[2].."% - "..args[3] end end, 61, batname) + wlist[screen][name] = widget parent_layout:add(bg) + widgets.update(name) end --}}} widgets.add.battery = batterywidget -- wireless status -local function wifiwidget(screen, parent_layout, interface) --{{{ - wlist[screen]["wifi"] = wibox.widget.textbox() - vicious.register(wlist[screen]["wifi"], vicious.widgets.wifi, +local function wifiwidget(name, screen, parent_layout, interface) --{{{ + wlist[screen][name] = wibox.widget.textbox() + vicious.register(wlist[screen][name], vicious.widgets.wifi, "WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, interface) - parent_layout:add(wlist[screen]["wifi"]) + parent_layout:add(wlist[screen][name]) end --}}} widgets.add.wifi = wifiwidget From b6c0a980735dab9d6e6cf38f112a46207983cce7 Mon Sep 17 00:00:00 2001 From: crater2150 Date: Thu, 2 May 2013 00:25:52 +0200 Subject: [PATCH 5/8] update --- .gitignore | 1 + .gitmodules | 3 - aweswt.lua | 138 ---------------------------- bindings.lua | 25 +++-- inspect.lua | 248 ++++++++++++++++++++++++++++++++++++++++++++++++++ modalbind.lua | 50 ++++++---- mpd.lua | 74 ++++----------- obvious | 1 - rc.lua | 2 + rules.lua | 12 +++ simplelog.lua | 6 +- uzbl.lua | 47 ---------- widgets.lua | 2 +- 13 files changed, 329 insertions(+), 280 deletions(-) delete mode 100644 aweswt.lua create mode 100644 inspect.lua delete mode 160000 obvious delete mode 100644 uzbl.lua diff --git a/.gitignore b/.gitignore index 98e0180..1270333 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ wallpaper walls *.swp localconf.lua +debugging diff --git a/.gitmodules b/.gitmodules index 0ae50e8..2a6f841 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "obvious"] - path = obvious - url = git://git.mercenariesguild.net/obvious.git [submodule "vicious"] path = vicious url = http://git.sysphere.org/vicious diff --git a/aweswt.lua b/aweswt.lua deleted file mode 100644 index f7eb326..0000000 --- a/aweswt.lua +++ /dev/null @@ -1,138 +0,0 @@ --- aweswt.lua --- Application switcher using dmenu --- - -local M = {} - --- local functions -local get_out, get_input, _switch, assemble_command - -local defaults = {} -local settings = {} - -defaults.bg_focus = theme.bg_focus -defaults.fg_focus = theme.fg_focus -defaults.bg_normal = theme.bg_normal -defaults.fg_normal = theme.fg_normal -defaults.font = string.gsub(theme.font, " ","-") -defaults.menu_cmd = "dmenu -nf %q -nb %q -sf %q -sb %q -p 'Switch to' -fn %q -i" - -local command - -for key, value in pairs(defaults) do - settings[key] = value -end - - - --- switch with window titles -M.switch = function() - _switch(true) -end - --- switch with client instance and class -M.switch_class = function() - _switch(false) -end - --- {{{ option setters - -M.set_bg_focus = function (color) - settings.bg_focus = color or defaults.bg_focus - assemble_command() -end - -M.set_fg_focus = function (color) - settings.fg_focus = color or defaults.fg_focus - assemble_command() -end - -M.set_bg_normal = function (color) - settings.bg_normal = color or defaults.bg_normal - assemble_command() -end - -M.set_fg_normal = function (color) - settings.fg_normal = color or defaults.fg_normal - assemble_command() -end - -M.set_font = function (font) - settings.font = font or defaults.font - assemble_command() -end - -M.set_menu_command = function (command) - settings.menu_cmd = command or defaults.menu_cmd - assemble_command() -end - --- }}} - --- {{{ io functions -get_out = function (a) - local f = io.popen(a) - t = {} - for line in f:lines() do - table.insert(t, line) - end - return t -end - -get_input = function (a) - s1 = 'echo "' .. a .. '" | ' .. command - return get_out(s1) -end - --- }}} - --- {{{ main worker function -_switch = function(use_name) - local clients = client.get() - - if table.getn(clients) == 0 then - return - end - - local client_list_table = {} - local apps = {} - - for key, client in pairs(clients) do - local app - - if use_name then - app = client['name'] - else - app = key .. ':' .. client['instance'] .. '.' .. client['class'] - end - - table.insert(client_list_table, app) - apps[app] = client - end - - table.sort(client_list_table, function(a, b) - return string.lower(a) < string.lower(b) - end) - local client_list = table.concat(client_list_table, "\n") - - local client_selected = apps[get_input(client_list)[1]] - if client_selected then - local ctags = client_selected:tags() - awful.tag.viewonly(ctags[1]) - client.focus = client_selected - client_selected:raise() - end -end --- }}} - -assemble_command = function() - command = string.format(settings.menu_cmd, - settings.fg_normal, - settings.bg_normal, - settings.fg_focus, - settings.bg_focus, - settings.font) -end - -assemble_command() -return M diff --git a/bindings.lua b/bindings.lua index 4a949f5..6f35dda 100644 --- a/bindings.lua +++ b/bindings.lua @@ -2,9 +2,7 @@ local awful = awful local conf = conf local mpd = require("mpd") -local obvious = {} local scratch = require("scratch") -obvious.popup_run_prompt = require("obvious.popup_run_prompt") local modkey = conf.modkey or "Mod4" local mb = require("modalbind") @@ -32,9 +30,9 @@ mpdmap = { mpdpromts = { name = "MPD PROMPTS", a = mpd.prompt.artist, - A = mpd.prompt.album, + b = mpd.prompt.album, t = mpd.prompt.title, - r = mpd.prompt.toggle_replace_on_search, + r = mpd.prompt.toggle_replace_on_search } progmap = { @@ -51,14 +49,13 @@ function rfkill(cmd) for key, adapter in pairs(adapters) do map[key] = spawnf("sudo rfkill "..cmd.." "..adapter) end - print(map["name"]) return map end --- wirelessmap = { --- name = "RFKILL", --- b = function () mb.grab(rfkill("block")) end, --- u = function () mb.grab(rfkill("unblock")) end --- } +wirelessmap = { + name = "RFKILL", + b = mb.grabf(rfkill("block")), + u = mb.grabf(rfkill("unblock")) +} function bindings.extend_and_register_key_table(globalkeys) local totalkeys = globalkeys or {} @@ -71,10 +68,10 @@ function bindings.extend_and_register_key_table(globalkeys) --{{{ Modal mappings - awful.key({ modkey }, "m", function () mb.grab(mpdmap, true) end), - awful.key({ modkey, "Shift" }, "m", function () mb.grab(mpdpromts) end), - awful.key({ modkey }, "c", function () mb.grab(progmap) end), - awful.key({ modkey }, "w", function () mb.grab(wirelessmap) end), + 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)), --}}} --{{{ Audio control diff --git a/inspect.lua b/inspect.lua new file mode 100644 index 0000000..25632c9 --- /dev/null +++ b/inspect.lua @@ -0,0 +1,248 @@ +----------------------------------------------------------------------------------------------------------------------- +-- inspect.lua - v1.2.0 (2012-10) +-- Enrique García Cota - enrique.garcia.cota [AT] gmail [DOT] com +-- human-readable representations of tables. +-- inspired by http://lua-users.org/wiki/TableSerialization +----------------------------------------------------------------------------------------------------------------------- + +local inspect ={} +inspect.__VERSION = '1.2.0' + +-- Apostrophizes the string if it has quotes, but not aphostrophes +-- Otherwise, it returns a regular quoted string +local function smartQuote(str) + if string.match( string.gsub(str,"[^'\"]",""), '^"+$' ) then + return "'" .. str .. "'" + end + return string.format("%q", str ) +end + +local controlCharsTranslation = { + ["\a"] = "\\a", ["\b"] = "\\b", ["\f"] = "\\f", ["\n"] = "\\n", + ["\r"] = "\\r", ["\t"] = "\\t", ["\v"] = "\\v", ["\\"] = "\\\\" +} + +local function unescapeChar(c) return controlCharsTranslation[c] end + +local function unescape(str) + local result, _ = string.gsub( str, "(%c)", unescapeChar ) + return result +end + +local function isIdentifier(str) + return type(str) == 'string' and str:match( "^[_%a][_%a%d]*$" ) +end + +local function isArrayKey(k, length) + return type(k)=='number' and 1 <= k and k <= length +end + +local function isDictionaryKey(k, length) + return not isArrayKey(k, length) +end + +local sortOrdersByType = { + ['number'] = 1, ['boolean'] = 2, ['string'] = 3, ['table'] = 4, + ['function'] = 5, ['userdata'] = 6, ['thread'] = 7 +} + +local function sortKeys(a,b) + local ta, tb = type(a), type(b) + if ta ~= tb then return sortOrdersByType[ta] < sortOrdersByType[tb] end + if ta == 'string' or ta == 'number' then return a < b end + return false +end + +local function getDictionaryKeys(t) + local length = #t + local keys = {} + for k,_ in pairs(t) do + if isDictionaryKey(k, length) then table.insert(keys,k) end + end + table.sort(keys, sortKeys) + return keys +end + +local function getToStringResultSafely(t, mt) + local __tostring = type(mt) == 'table' and mt.__tostring + local string, status + if type(__tostring) == 'function' then + status, string = pcall(__tostring, t) + string = status and string or 'error: ' .. tostring(string) + end + return string +end + +local Inspector = {} + +function Inspector:new(t, depth) + local inspector = { + buffer = {}, + depth = depth, + level = 0, + maxIds = { + ['function'] = 0, + ['userdata'] = 0, + ['thread'] = 0, + ['table'] = 0, + ['key'] = 0, + ['tag'] = 0 + }, + ids = { + ['function'] = setmetatable({}, {__mode = "kv"}), + ['userdata'] = setmetatable({}, {__mode = "kv"}), + ['thread'] = setmetatable({}, {__mode = "kv"}), + ['table'] = setmetatable({}, {__mode = "kv"}), + ['key'] = setmetatable({}, {__mode = "kv"}), + ['tag'] = setmetatable({}, {__mode = "kv"}) + }, + tableAppearances = setmetatable({}, {__mode = "k"}) + } + + setmetatable(inspector, {__index = Inspector}) + + inspector:countTableAppearances(t) + + return inspector:putValue(t) +end + +function Inspector:countTableAppearances(t) + if type(t) == 'table' then + if not self.tableAppearances[t] then + self.tableAppearances[t] = 1 + for k,v in pairs(t) do + self:countTableAppearances(k) + self:countTableAppearances(v) + end + else + self.tableAppearances[t] = self.tableAppearances[t] + 1 + end + self:countTableAppearances(getmetatable(t)) + end +end + +function Inspector:tabify() + self:puts("\n", string.rep(" ", self.level)) + return self +end + +function Inspector:up() + self.level = self.level - 1 +end + +function Inspector:down() + self.level = self.level + 1 +end + +function Inspector:puts(...) + local args = {...} + local len = #self.buffer + for i=1, #args do + len = len + 1 + self.buffer[len] = tostring(args[i]) + end + return self +end + +function Inspector:commaControl(comma) + if comma then self:puts(',') end + return true +end + +function Inspector:putTable(t) + if self:alreadyVisited(t) then + self:puts('') + elseif self.depth and self.level >= self.depth then + self:puts('{...}') + else + if self.tableAppearances[t] > 1 then + self:puts('<',self:getId(t),'>') + end + self:puts('{') + self:down() + + local length = #t + local mt = getmetatable(t) + + local string = getToStringResultSafely(t, mt) + if type(string) == 'string' and #string > 0 then + self:puts(' -- ', unescape(string)) + if length >= 1 then self:tabify() end -- tabify the array values + end + + local comma = false + for i=1, length do + comma = self:commaControl(comma) + self:puts(' '):putValue(t[i]) + end + + local dictKeys = getDictionaryKeys(t) + + for _,k in ipairs(dictKeys) do + comma = self:commaControl(comma) + self:tabify():putKey(k):puts(' = '):putValue(t[k]) + end + + if mt then + comma = self:commaControl(comma) + self:tabify():puts(' = '):putValue(mt) + end + + self:up() + + if #dictKeys > 0 or mt then -- dictionary table. Justify closing } + self:tabify() + elseif length > 0 then -- array tables have one extra space before closing } + self:puts(' ') + end + self:puts('}') + end + return self +end + +function Inspector:alreadyVisited(v) + return self.ids[type(v)][v] ~= nil +end + +function Inspector:getId(v) + local tv = type(v) + local idtable = self.ids[tv] + local id = idtable and idtable[v] or nil + if not id then + id = self.maxIds[tv] + 1 + self.maxIds[tv] = id + self.ids[tv][v] = id + end + return id +end + +function Inspector:putValue(v) + local tv = type(v) + + if tv == 'string' then + self:puts(smartQuote(unescape(v))) + elseif tv == 'number' or tv == 'boolean' or tv == 'nil' then + self:puts(tostring(v)) + elseif tv == 'table' then + self:putTable(v) + else + self:puts('<',tv,' ',self:getId(v),'>') + end + return self +end + +function Inspector:putKey(k) + if isIdentifier(k) then return self:puts(k) end + return self:puts( "[" ):putValue(k):puts("]") +end + +function Inspector:tostring() + return table.concat(self.buffer) +end + +setmetatable(inspect, { __call = function(_,t,depth) + return Inspector:new(t, depth):tostring() +end }) + +return inspect + diff --git a/modalbind.lua b/modalbind.lua index f3f027c..aef2c71 100644 --- a/modalbind.lua +++ b/modalbind.lua @@ -1,7 +1,9 @@ -local M = {} +local modalbind = {} +local wibox = require("wibox") local inited = false local modewidget = {} local modewibox = { screen = -1 } +local nesting = 0 --local functions @@ -31,49 +33,54 @@ end --- Change the opacity of the modebox. -- @param amount opacity between 0.0 and 1.0, or nil to use default -M.set_opacity = function (amount) +function set_opacity(amount) settings.opacity = amount or defaults.opacity update_settings() end +modalbind.set_opacity = set_opacity --- Change height of the modebox. -- @param amount height in pixels, or nil to use default -M.set_height = function (amount) +function set_height(amount) settings.height = amount or defaults.height update_settings() end +modalbind.set_height = set_height --- Change border width of the modebox. -- @param amount width in pixels, or nil to use default -M.set_border_width = function (amount) +function set_border_width(amount) settings.border_width = amount or defaults.border_width update_settings() end +modalbind.set_border_width = set_border_width --- Change horizontal offset of the modebox. -- set location for the box with set_corner(). The box is shifted to the right -- if it is in one of the left corners or to the left otherwise -- @param amount horizontal shift in pixels, or nil to use default -M.set_x_offset = function (amount) +function set_x_offset (amount) settings.x_offset = amount or defaults.x_offset update_settings() end +modalbind.set_x_offset = set_x_offset --- Change vertical offset of the modebox. -- set location for the box with set_corner(). The box is shifted downwards if it -- is in one of the upper corners or upwards otherwise. -- @param amount vertical shift in pixels, or nil to use default -M.set_y_offset = function (amount) +function set_y_offset(amount) settings.y_offset = amount or defaults.y_offset update_settings() end +modalbind.set_y_offset = set_y_offset --- Set the corner, where the modebox will be displayed -- If a parameter is not a valid orientation (see below), the function returns -- without doing anything -- @param vertical either top or bottom -- @param horizontal either left or right -M.set_corner = function (vertical, horizontal) +function set_corner(vertical, horizontal) if (vertical ~= "top" and vertical ~= "bottom") then return end @@ -83,10 +90,12 @@ M.set_corner = function (vertical, horizontal) settings.corner_v = vertical or defaults.corner_v settings.corner_h = horizontal or defaults.corner_h end +modalbind.set_corner = set_corner -M.set_show_options = function (bool) +function set_show_options(bool) settings.show_options = bool end +modalbind.set_show_options = set_show_options local function set_default(s) minwidth, minheight = modewidget[s]:fit(screen[s].geometry.width, @@ -151,12 +160,16 @@ local function hide_box() if s ~= -1 then modewibox[s].visible = false end end -M.grab = function(keymap, stay_in_mode) - if keymap.name then show_box(mouse.screen, keymap) end +function grab(keymap, stay_in_mode) + if keymap.name then + show_box(mouse.screen, keymap) + nesting = nesting + 1 + end keygrabber.run(function(mod, key, event) if key == "Escape" then keygrabber.stop() + nesting = 0 hide_box(); return true end @@ -167,9 +180,10 @@ M.grab = function(keymap, stay_in_mode) keygrabber.stop() keymap[key]() if stay_in_mode then - M.grab(keymap, true) + grab(keymap, true) else - hide_box() + nesting = nesting - 1 + if nesting < 1 then hide_box() end return true end end @@ -177,10 +191,14 @@ M.grab = function(keymap, stay_in_mode) return true end) end -M.grabf = function(keymap, stay_in_mode) - return function() M.grab(keymap, stay_in_mode) end +modalbind.grab = grab + +function grabf(keymap, stay_in_mode) + return function() grab(keymap, stay_in_mode) end end +modalbind.grabf = grabf -M.wibox = function() return modewibox[1] end +function modebox() return modewibox[1] end +modalbind.modebox = modebox -return M +return modalbind diff --git a/mpd.lua b/mpd.lua index 1d8239c..99b3c9b 100644 --- a/mpd.lua +++ b/mpd.lua @@ -1,74 +1,46 @@ ---assert(package.loadlib(MY_PATH .. "./mpdc.so", "luaopen_mpdc")) -require "mpdc" local M = {} -local type = "" local conf = conf +local awful = awful +local log = log -- local functions -local show, mpc_play_search, notify - -local conn = nil +local dmenu, mpc_play_search, notify, mpc local defaults = {} local settings = {} -defaults.host = "127.0.0.1" -defaults.port = 6600 defaults.replace_on_search = true for key, value in pairs(defaults) do settings[key] = value end --- {{{ basic functions - -M.connect = function () - print("Connecting to mpd") - conn = mpdc.open(settings.host, settings.port) +mpc = function(command) + awful.util.spawn("mpc " .. command) end -M.disconnect = function() - if conn ~= nil then conn:close() end - conn = nil -end - -M.ensure_connection = function() - -- connect on first call - if conn == nil then M.connect() end -end - --- }}} - -- {{{ mpd.ctrl submodule M.ctrl = {} M.ctrl.toggle = function () - M.ensure_connection() - conn:toggle() + mpc("toggle") end M.ctrl.play = function () - M.ensure_connection() - conn:play() - -- TODO widget updating + mpc("play") end M.ctrl.pause = function () - M.ensure_connection() - conn:pause() + mpc("pause") end M.ctrl.next = function () - M.ensure_connection() - conn:next() - -- TODO widget updating + mpc("next") end M.ctrl.prev = function () - M.ensure_connection() - conn:prev() - -- TODO widget updating + mpc("prev") end -- }}} @@ -82,22 +54,23 @@ local clear_before = conf.mpd_prompt_clear_before == nil and M.prompt = {} M.prompt.artist = function() - type = "artist" - show() + dmenu("-a") end M.prompt.album = function() - type = "album" - show() + dmenu("-a -b") end M.prompt.title = function() - type = "title" - show() + dmenu("-a -b -t") end M.prompt.title = title +function dmenu(opts) + awful.util.spawn("dmpc " .. (clear_before and "-r" or "-R") .. " " .. opts) +end + M.prompt.replace_on_search = function(bool) clear_before = bool end @@ -109,19 +82,8 @@ M.prompt.toggle_replace_on_search = function() ).. " the playlist") end -function show() - obvious.popup_run_prompt.set_prompt_string("Play ".. type .. ":") - obvious.popup_run_prompt.set_cache("/mpd_ ".. type); - obvious.popup_run_prompt.set_run_function(mpc_play_search) - obvious.popup_run_prompt.run_prompt() -end - function mpc_play_search(s) - if clear_before then conn:clear() end - local result, num = conn:isearch(type, s) - notify("Found " .. (num) .. " matches"); - conn:iadd(result) - conn:play() + notify("Found " .. (s) .. " matches"); end -- }}} diff --git a/obvious b/obvious deleted file mode 160000 index c5b8844..0000000 --- a/obvious +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c5b884459194a15a38b88c99d5558a64efaf4e89 diff --git a/rc.lua b/rc.lua index 64f938f..0e1fe34 100644 --- a/rc.lua +++ b/rc.lua @@ -7,6 +7,7 @@ beautiful = require("autobeautiful") naughty = require("naughty") conf = require("localconf") require("errors") +inspect = require("inspect") -- }}} layouts = require('layouts') @@ -22,6 +23,7 @@ log.add_logger(log.loggers.naughty, 2) tags = require('tags') tags.setup() + -- }}} -- {{{ widgets diff --git a/rules.lua b/rules.lua index b512885..4f50dac 100644 --- a/rules.lua +++ b/rules.lua @@ -129,6 +129,18 @@ local function setup(self) opacity = 0.9 } }, + { + rule = { class = "feh", name = "timetable" }, + properties = { + tag = tags[rule_screen][13], + skip_taskbar = true, + type = desktop, + below = true, + focusable = false, + border_width = 0, + floating = true + } + }, { rule = { instance = "Awesomelog" }, properties = { diff --git a/simplelog.lua b/simplelog.lua index 6526689..b4e4c30 100644 --- a/simplelog.lua +++ b/simplelog.lua @@ -26,10 +26,10 @@ function loglv(msg, level) end end -function debug(msg) +function dbg(msg) loglv(msg, 0) end -simplelog.debug = debug +simplelog.debug = dbg function log(msg) loglv(msg, 1) @@ -50,13 +50,11 @@ function add_logger(logger, level) if level == nil then level = settings.defaultlevel end - print(inspect(logger)) table.insert(settings.loggers, function(msg, severity) if severity >= level then logger(msg, severity) end end) - print(inspect(settings.loggers)) end simplelog.add_logger = add_logger diff --git a/uzbl.lua b/uzbl.lua deleted file mode 100644 index bbd6b22..0000000 --- a/uzbl.lua +++ /dev/null @@ -1,47 +0,0 @@ - - -uzbltag = tags[rule_screen][2] -mytasklist = {} -mytasklist.buttons = awful.util.table.join( -awful.button({ }, 1, function (c) - if c == client.focus then - c.minimized = true - else - if not c:isvisible() then - awful.tag.viewonly(c:tags()[1]) - end - -- This will also un-minimize - -- the client, if needed - client.focus = c - c:raise() - end -end), -awful.button({ }, 3, function () - if instance then - instance:hide() - instance = nil - else - instance = awful.menu.clients({ width=250 }) - end -end), -awful.button({ }, 4, function () - awful.client.focus.byidx(1) - if client.focus then client.focus:raise() end -end), -awful.button({ }, 5, function () - awful.client.focus.byidx(-1) - if client.focus then client.focus:raise() end -end)) - -mytasklist[rule_screen] = awful.widget.tasklist(function(c) - return awful.widget.tasklist.label.currenttags(c, rule_screen) -end, mytasklist.buttons) -uzblbox = {} -uzblbox = awful.wibox({ position = "top", screen = rule_screen }) -uzblbox.visible = false -uzblbox.widgets = { mytasklist[rule_screen], -layout = awful.widget.layout.horizontal.rightleft } - -uzbltag:add_signal("property::selected", function (tag) - uzblbox.visible = tag.selected -end) diff --git a/widgets.lua b/widgets.lua index c1ccffc..9c7b21f 100644 --- a/widgets.lua +++ b/widgets.lua @@ -202,9 +202,9 @@ widgets.add.cpu = cpuwidget -- battery local function batterywidget(name, screen, parent_layout, batname) --{{{ + print("creating batwidget '" .. name .. "' for battery '"..batname.."'") local widget = wibox.widget.textbox() local bg = wibox.widget.background() - print("creating batwidget '" .. name .. "' for battery '"..batname.."'") bg:set_widget(widget) vicious.register(widget, vicious.widgets.bat, function (widget, args) if args[2] == 0 then return "" From 8de3f0951cde02bdd99fa7e5c5e2bb832fb548d2 Mon Sep 17 00:00:00 2001 From: crater2150 Date: Tue, 21 Jan 2014 13:20:48 +0100 Subject: [PATCH 6/8] Add/Change keybindings --- bindings.lua | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/bindings.lua b/bindings.lua index 6f35dda..a978c2b 100644 --- a/bindings.lua +++ b/bindings.lua @@ -18,6 +18,8 @@ awful.button({ }, 5, awful.tag.viewprev) local function spawnf(cmd) return function() awful.util.spawn(cmd) end end +conf.cmd.run = conf.cmd.run or spawnf("dmenu_run") + mpdmap = { name = "MPD", m = mpd.ctrl.toggle, @@ -43,6 +45,12 @@ progmap = { m = spawnf(conf.cmd.mail_client) } +docmap = { + name = "DOCUMENTS", + u = spawnf("docopen ~/uni pdf"), + b = spawnf("docopen ~/books pdf epub mobi txt lit html htm"), +} + adapters = { u = "wwan", w = "wlan", b = "bluetooth" } function rfkill(cmd) map={ name = string.upper(cmd) } @@ -51,10 +59,18 @@ function rfkill(cmd) end return map end + +connectmap = { + name = "CONNECT", + u = spawnf("umts"), + w = spawnf("wlanacpi") +} + wirelessmap = { - name = "RFKILL", + name = "WIRELESS", b = mb.grabf(rfkill("block")), - u = mb.grabf(rfkill("unblock")) + u = mb.grabf(rfkill("unblock")), + c = mb.grabf(connectmap) } function bindings.extend_and_register_key_table(globalkeys) @@ -72,6 +88,7 @@ function bindings.extend_and_register_key_table(globalkeys) 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)), --}}} --{{{ Audio control @@ -90,16 +107,16 @@ function bindings.extend_and_register_key_table(globalkeys) scratch.drop(conf.cmd.terminal,"center","center", 0.99, 0.7) end ), awful.key({ modkey }, "`", function () - scratch.drop("urxvtc -e ncmpcpp","bottom","center", 0.99, 0.4) + scratch.drop("gpms","bottom","center", 0.99, 0.4) end ), awful.key({ }, "Print", function () - scratch.drop("galsamixer","top","center", 0.99, 0.4) + scratch.drop("gpulse-mixer","top","center", 0.99, 0.4) end ), -- }}} --{{{ Prompt - awful.key({ modkey }, "r", spawnf("dmenu_run")), + awful.key({ modkey }, "r", conf.cmd.run), awful.key({ modkey }, "s", spawnf("dmsearch")), From 79c0a95ecba9ac338091949b83768db66846d64d Mon Sep 17 00:00:00 2001 From: crater2150 Date: Tue, 21 Jan 2014 13:22:22 +0100 Subject: [PATCH 7/8] Add popup callback for client rules, e.g. popup when chat client becomes urgent --- rules.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rules.lua b/rules.lua index 4f50dac..5e69796 100644 --- a/rules.lua +++ b/rules.lua @@ -7,6 +7,16 @@ local inspect=require("inspect") local rule_screen = conf.rule_screen or 1 +local function popup_urgent(message) + return function(client) + client:connect_signal("property::urgent", function (c) + if c.urgent and not c.focus then + naughty.notify({ text=message }) + end + end) + end +end + local function setup(self) awful.rules.rules = { -- All clients will match this rule. @@ -45,7 +55,8 @@ local function setup(self) rule_any = { class = {"Pidgin"}, instance = {"Weechat"} }, properties = { tag = tags[rule_screen][3], opacity = 0.9 - } + }, + callback = popup_urgent("new chat message") }, { rule = { role = "buddy_list" }, From 3d524e8f3ef840228258ef468ef45e399e3a93b5 Mon Sep 17 00:00:00 2001 From: crater2150 Date: Tue, 21 Jan 2014 13:22:42 +0100 Subject: [PATCH 8/8] Some rule updates --- rules.lua | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/rules.lua b/rules.lua index 5e69796..8cd7cb7 100644 --- a/rules.lua +++ b/rules.lua @@ -37,6 +37,13 @@ local function setup(self) rule = { class = "Passprompt" }, properties = { ontop = true, focus = true} }, + { + rule = { class = "Sm" }, + properties = { + ontop = true, + border_width = 0 + } + }, { rule_any = { class = { "pinentry", "Passprompt", "MPlayer" @@ -64,6 +71,14 @@ local function setup(self) master = true } }, + + { + rule = { class = "Steam", name = "Friends" }, + properties = { + master = true + } + }, + { rule_any = { role ={ "conversation" }, instance = { "Weechat" } }, callback = awful.client.setslave @@ -111,6 +126,14 @@ local function setup(self) tag = tags[rule_screen][7] } }, + { + rule = { class = "Pdfpc" }, + properties = { + size_hints_honor = true, + float = true, + fullscreen = true + } + }, { rule = { class = "Cellwriter" }, properties = { @@ -128,6 +151,12 @@ local function setup(self) tag = tags[rule_screen][22] } }, + { + rule = { class = "Dmenu" }, + properties = { + opacity = 0.8 + } + }, { rule = { class = "URxvt" }, properties = { @@ -146,10 +175,8 @@ local function setup(self) tag = tags[rule_screen][13], skip_taskbar = true, type = desktop, - below = true, focusable = false, - border_width = 0, - floating = true + border_width = 0 } }, {