From b8dae293fafb0f289bf85a76cb2ed9fd336ff9da Mon Sep 17 00:00:00 2001 From: crater2150 Date: Thu, 28 May 2015 15:21:42 +0200 Subject: [PATCH] Wrap all widgets in a margin layout with hide method --- rc.lua | 12 +++++---- vicious | 2 +- widgets.lua | 70 ++++++++++++++++++++++++++++++++++++----------------- 3 files changed, 56 insertions(+), 28 deletions(-) diff --git a/rc.lua b/rc.lua index 4ce64b8..d8f8ccb 100644 --- a/rc.lua +++ b/rc.lua @@ -32,14 +32,16 @@ for s = 1, screen.count() do local lbottom = widgets.layout(s, "left", "bottom") local rbottom = widgets.layout(s, "right", "bottom") - widgets.add.clock("clock", ltop) + local clock = widgets.add.clock("clock", rtop) + clock:set_right(10) - widgets.add.layout(lbottom) + widgets.add.layout_indicator(lbottom) widgets.add.taglist("tags", lbottom) - widgets.add.mail("mail_me", rbottom, { os.getenv("HOME") .. "/.maildir/me" }, "bottom_right") - widgets.add.spacer(rbottom) - widgets.add.mail("mail_uber", rbottom, { os.getenv("HOME") .. "/.maildir/uber" }, "bottom_right") + local mail1 = widgets.add.mail("mail_me", rbottom, { os.getenv("HOME") .. "/.maildir/me" }, "bottom_right", "me") + mail1:set_left(15) + local mail2 = widgets.add.mail("mail_uber", rbottom, { os.getenv("HOME") .. "/.maildir/uber" }, "bottom_right", "uber") + mail2:set_left(15) widgets.add.cpu("cpu", rtop) widgets.add.spacer(rtop) diff --git a/vicious b/vicious index d9ccd9a..c86be2f 160000 --- a/vicious +++ b/vicious @@ -1 +1 @@ -Subproject commit d9ccd9aa4ca8bed86717ddec3856a77a67b33218 +Subproject commit c86be2f51556dd4e4090b4b8f820bde97edb3119 diff --git a/widgets.lua b/widgets.lua index 1cd712b..ffa2b80 100644 --- a/widgets.lua +++ b/widgets.lua @@ -2,7 +2,7 @@ local wibox = require("wibox") local vicious = require("vicious") local modkey = conf.modkey or "Mod4" local awful = require("awful") - +local tag = require("awful.tag") local widgets = { add = {} } -------------------------------------------------------------------------------- @@ -124,60 +124,87 @@ widgets.layout = get_layout -- widget creators {{{ -------------------------------------------------------------------------------- +local show = function(self) + self:set_widget(self.widget) +end + +local hide = function(self) + self:set_widget(nil) +end + +local function wrap_and_add(name, parent, widget) + local container = wibox.layout.margin(widget) + container.widget = widget + container.show = show + container.hide = hide + + wlist[parent.screen][name] = widget + parent.layout:add(container) + return container +end + + -- mail widget -local function mailwidget(name, parent, mailboxes, notify_pos) --{{{ +local function mailwidget(name, parent, mailboxes, notify_pos, title) --{{{ local widget = wibox.widget.textbox() local bg = wibox.widget.background() bg:set_widget(widget) + + local container = wrap_and_add(name, parent, bg) 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], + title = "New mail arrived in box " .. title, + text = title " "..args[2].." / "..args[1], position = notify_pos or "top_left" }) bg:set_bg(theme.bg_urgent) bg:set_fg(theme.fg_urgent) + container:show() elseif args[2] > 0 then bg:set_bg(theme.bg_focus) bg:set_fg(theme.fg_focus) + container:show() else bg:set_bg(theme.bg_normal) bg:set_fg(theme.fg_normal) + container:hide() end return "⬓⬓ Unread "..args[2].." / New "..args[1].. " " end, 0, mailboxes) - wlist[parent.screen][name] = widget - parent.layout:add(bg) widgets.update(name) + return container end --}}} widgets.add.mail = mailwidget -- text clock local function clockwidget(name, parent) -- {{{ - wlist[parent.screen][name] = awful.widget.textclock() - parent.layout:add(wlist[parent.screen][name]) + return wrap_and_add(name, parent, awful.widget.textclock()) end --}}} widgets.add.clock = clockwidget -- layoutbox local function layoutwidget(parent) -- {{{ - wlist[parent.screen]["layout"] = awful.widget.layoutbox(s) - parent.layout:add(wlist[parent.screen]["layout"]) + return wrap_and_add("layout", parent, awful.widget.layoutbox(s)) end --}}} -widgets.add.layout = layoutwidget +widgets.add.layout_indicator = layoutwidget -- taglist local function taglistwidget(name, parent) --{{{ + local filter_urgentonly = function(t, args) + for k, c in pairs(t:clients()) do + if c.urgent then return true end + end + return t.selected + end -- Create a taglist widget - wlist[parent.screen][name] = awful.widget.taglist(parent.screen, - awful.widget.taglist.filter.all, - mytaglist.buttons) - parent.layout:add(wlist[parent.screen][name]) + return wrap_and_add(name, parent, + awful.widget.taglist(parent.screen, filter_urgentonly, mytaglist.buttons) + ) end --}}} widgets.add.taglist = taglistwidget @@ -189,20 +216,20 @@ local function systraywidget(parent) --{{{ end wlist["systray"] = wibox.widget.systray() parent.layout:add(wlist["systray"]) + return wlist["systray"] end --}}} widgets.add.systray = systraywidget -- cpu usage local function cpuwidget(name, parent) --{{{ - wlist[parent.screen][name] = wibox.widget.textbox() + local cpu = wrap_and_add(name, parent, wibox.widget.textbox()) vicious.register(wlist[parent.screen][name], vicious.widgets.cpu, "CPU: $1%") - parent.layout:add(wlist[parent.screen][name]) + return cpu end --}}} widgets.add.cpu = cpuwidget -- battery local function batterywidget(name, parent, batname) --{{{ - print("creating batwidget '" .. name .. "' for battery '"..batname.."'") local widget = wibox.widget.textbox() local bg = wibox.widget.background() bg:set_widget(widget) @@ -220,18 +247,17 @@ local function batterywidget(name, parent, batname) --{{{ args[1]..args[2].."% - "..args[3] end end, 61, batname) - wlist[parent.screen][name] = widget - parent.layout:add(bg) widgets.update(name) + return wrap_and_add(name, parent, bg) end --}}} widgets.add.battery = batterywidget -- wireless status local function wifiwidget(name, parent, interface) --{{{ - wlist[parent.screen][name] = wibox.widget.textbox() + local wifi = wrap_and_add(name, parent, wibox.widget.textbox()) vicious.register(wlist[parent.screen][name], vicious.widgets.wifi, "WLAN ${ssid} @ ${sign}dBm, Q:${link}/70", 31, interface) - parent.layout:add(wlist[parent.screen][name]) + return wifi end --}}} widgets.add.wifi = wifiwidget