From 8f948b52ebd1ce35a20bf43708444a2bc01ad673 Mon Sep 17 00:00:00 2001 From: Luke Bonham Date: Sun, 2 Apr 2017 19:35:03 +0200 Subject: [PATCH] widgets: no global tables, but one instance per call; closes #336; closes #337 --- widget/alsabar.lua | 43 +++++++++++++------------- widget/contrib/kbdlayout.lua | 2 +- widget/contrib/moc.lua | 7 ++--- widget/cpu.lua | 19 +++++------- widget/fs.lua | 59 +++++++++++++++++------------------- widget/mem.lua | 15 +++------ widget/mpd.lua | 10 +++--- widget/net.lua | 3 +- widget/pulseaudio.lua | 2 +- widget/pulsebar.lua | 43 +++++++++++++------------- widget/sysload.lua | 18 +++++------ widget/temp.lua | 17 +++++------ 12 files changed, 106 insertions(+), 132 deletions(-) diff --git a/widget/alsabar.lua b/widget/alsabar.lua index 7aa8835..2ad0210 100644 --- a/widget/alsabar.lua +++ b/widget/alsabar.lua @@ -7,32 +7,31 @@ --]] -local helpers = require("lain.helpers") -local awful = require("awful") -local naughty = require("naughty") -local wibox = require("wibox") -local math = { modf = math.modf } -local string = { format = string.format, - match = string.match, - rep = string.rep } -local type = type -local tonumber = tonumber -local setmetatable = setmetatable +local helpers = require("lain.helpers") +local awful = require("awful") +local naughty = require("naughty") +local wibox = require("wibox") +local math = { modf = math.modf } +local string = { format = string.format, + match = string.match, + rep = string.rep } +local type, tonumber = type, tonumber -- ALSA volume bar -- lain.widget.alsabar -local alsabar = { - colors = { - background = "#000000", - mute = "#EB8F8F", - unmute = "#A4CE8A" - }, - - _current_level = 0, - _muted = false -} local function factory(args) + local alsabar = { + colors = { + background = "#000000", + mute = "#EB8F8F", + unmute = "#A4CE8A" + }, + + _current_level = 0, + _muted = false + } + local args = args or {} local timeout = args.timeout or 5 local settings = args.settings or function() end @@ -133,4 +132,4 @@ local function factory(args) return alsabar end -return setmetatable(alsabar, { __call = function(_, ...) return factory(...) end }) +return factory diff --git a/widget/contrib/kbdlayout.lua b/widget/contrib/kbdlayout.lua index e0fdbc0..5964bd7 100644 --- a/widget/contrib/kbdlayout.lua +++ b/widget/contrib/kbdlayout.lua @@ -18,7 +18,7 @@ local setmetatable = setmetatable -- lain.widget.contrib.kblayout local function factory(args) - local kbdlayout = { widget = wibox.widget.textbox() } + local kbdlayout = { widget = wibox.widget.textbox() } local args = args or {} local layouts = args.layouts or {} local settings = args.settings or function () end diff --git a/widget/contrib/moc.lua b/widget/contrib/moc.lua index f841e31..83d8aaf 100644 --- a/widget/contrib/moc.lua +++ b/widget/contrib/moc.lua @@ -15,13 +15,12 @@ local wibox = require("wibox") local os = { getenv = os.getenv } local string = { format = string.format, gmatch = string.gmatch } -local setmetatable = setmetatable -- MOC audio player -- lain.widget.contrib.moc -local moc = {} local function factory(args) + local moc = { widget = wibox.widget.textbox() } local args = args or {} local timeout = args.timeout or 2 local music_dir = args.music_dir or os.getenv("HOME") .. "/Music" @@ -31,8 +30,6 @@ local function factory(args) local followtag = args.followtag or false local settings = args.settings or function() end - moc.widget = wibox.widget.textbox() - moc_notification_preset = { title = "Now playing", timeout = 6 } helpers.set_map("current moc track", nil) @@ -98,4 +95,4 @@ local function factory(args) return moc end -return setmetatable(moc, { __call = function(_, ...) return factory(...) end }) +return factory diff --git a/widget/cpu.lua b/widget/cpu.lua index e8a6c9c..9a5a964 100644 --- a/widget/cpu.lua +++ b/widget/cpu.lua @@ -7,25 +7,22 @@ --]] -local helpers = require("lain.helpers") -local wibox = require("wibox") -local math = { ceil = math.ceil } -local string = { format = string.format, - gmatch = string.gmatch } -local tostring = tostring -local setmetatable = setmetatable +local helpers = require("lain.helpers") +local wibox = require("wibox") +local math = { ceil = math.ceil } +local string = { format = string.format, + gmatch = string.gmatch } +local tostring = tostring -- CPU usage -- lain.widget.cpu -local cpu = { core = {} } local function factory(args) + local cpu = { core = {}, widget = wibox.widget.textbox() } local args = args or {} local timeout = args.timeout or 2 local settings = args.settings or function() end - cpu.widget = wibox.widget.textbox() - function cpu.update() -- Read the amount of time the CPUs have spent performing -- different kinds of work. Read the first line of /proc/stat @@ -79,4 +76,4 @@ local function factory(args) return cpu end -return setmetatable(cpu, { __call = function(_, ...) return factory(...) end }) +return factory diff --git a/widget/fs.lua b/widget/fs.lua index f1bd648..473bd33 100644 --- a/widget/fs.lua +++ b/widget/fs.lua @@ -6,43 +6,42 @@ --]] -local helpers = require("lain.helpers") -local shell = require("awful.util").shell -local focused = require("awful.screen").focused -local wibox = require("wibox") -local naughty = require("naughty") -local string = string -local tonumber = tonumber -local setmetatable = setmetatable +local helpers = require("lain.helpers") +local shell = require("awful.util").shell +local focused = require("awful.screen").focused +local wibox = require("wibox") +local naughty = require("naughty") +local string = string +local tonumber = tonumber -- File system disk space usage -- lain.widget.fs -local fs = { unit = { ["mb"] = 1024, ["gb"] = 1024^2 } } -function fs.hide() - if not fs.notification then return end - naughty.destroy(fs.notification) - fs.notification = nil -end +local function factory(args) + local fs = { unit = { ["mb"] = 1024, ["gb"] = 1024^2 }, widget = wibox.widget.textbox() } -function fs.show(seconds, scr) - fs.update() + function fs.hide() + if not fs.notification then return end + naughty.destroy(fs.notification) + fs.notification = nil + end - fs.hide() + function fs.show(seconds, scr) + fs.update() + fs.hide() - if fs.followtag then - fs.notification_preset.screen = focused() - else - fs.notification_preset.screen = scr or 1 - end + if fs.followtag then + fs.notification_preset.screen = focused() + else + fs.notification_preset.screen = scr or 1 + end - fs.notification = naughty.notify({ - preset = fs.notification_preset, - timeout = seconds or 5 - }) -end + fs.notification = naughty.notify({ + preset = fs.notification_preset, + timeout = seconds or 5 + }) + end -local function factory(args) local args = args or {} local timeout = args.timeout or 600 local partition = args.partition or "/" @@ -62,8 +61,6 @@ local function factory(args) } end - fs.widget = wibox.widget.textbox() - helpers.set_map(partition, false) function fs.update() @@ -124,4 +121,4 @@ local function factory(args) return fs end -return setmetatable(fs, { __call = function(_, ...) return factory(...) end }) +return factory diff --git a/widget/mem.lua b/widget/mem.lua index cf0d314..50fff3b 100644 --- a/widget/mem.lua +++ b/widget/mem.lua @@ -7,24 +7,19 @@ --]] -local helpers = require("lain.helpers") -local wibox = require("wibox") -local gmatch = string.gmatch -local lines = io.lines -local floor = math.floor -local setmetatable = setmetatable +local helpers = require("lain.helpers") +local wibox = require("wibox") +local gmatch, lines, floor = string.gmatch, io.lines, math.floor -- Memory usage (ignoring caches) -- lain.widget.mem -local mem = {} local function factory(args) + local mem = { widget = wibox.widget.textbox() } local args = args or {} local timeout = args.timeout or 2 local settings = args.settings or function() end - mem.widget = wibox.widget.textbox() - function mem.update() mem_now = {} for line in lines("/proc/meminfo") do @@ -53,4 +48,4 @@ local function factory(args) return mem end -return setmetatable(mem, { __call = function(_, ...) return factory(...) end }) +return factory diff --git a/widget/mpd.lua b/widget/mpd.lua index 88b9937..d0b37d7 100644 --- a/widget/mpd.lua +++ b/widget/mpd.lua @@ -17,13 +17,12 @@ local os = { getenv = os.getenv } local string = { format = string.format, gmatch = string.gmatch, match = string.match } -local setmetatable = setmetatable -- MPD infos -- lain.widget.mpd -local mpd = {} local function factory(args) + local mpd = { widget = wibox.widget.textbox() } local args = args or {} local timeout = args.timeout or 2 local password = (args.password and #args.password > 0 and string.format("password %s\\n", args.password)) or "" @@ -41,8 +40,6 @@ local function factory(args) local echo = string.format("printf \"%sstatus\\ncurrentsong\\nclose\\n\"", password) local cmd = string.format("%s | curl --connect-timeout 1 -fsm 3 %s", echo, mpdh) - mpd.widget = wibox.widget.textbox() - mpd_notification_preset = { title = "Now playing", timeout = 6 } helpers.set_map("current mpd track", nil) @@ -112,7 +109,8 @@ local function factory(args) if not string.match(mpd_now.file, "http.*://") then -- local file instead of http stream local path = string.format("%s/%s", music_dir, string.match(mpd_now.file, ".*/")) - local cover = string.format("find '%s' -maxdepth 1 -type f | egrep -i -m1 '%s'", path:gsub("'", "'\\''"), cover_pattern) + local cover = string.format("find '%s' -maxdepth 1 -type f | egrep -i -m1 '%s'", + path:gsub("'", "'\\''"), cover_pattern) helpers.async({ shell, "-c", cover }, function(current_icon) common.icon = current_icon:gsub("\n", "") if #common.icon == 0 then common.icon = nil end @@ -134,4 +132,4 @@ local function factory(args) return mpd end -return setmetatable(mpd, { __call = function(_, ...) return factory(...) end }) +return factory diff --git a/widget/net.lua b/widget/net.lua index 7e511a3..f42ec25 100644 --- a/widget/net.lua +++ b/widget/net.lua @@ -16,8 +16,7 @@ local string = { format = string.format, match = string.match } -- lain.widget.net local function factory(args) - local net = { widget = wibox.widget.textbox(), devices = {} } - + local net = { widget = wibox.widget.textbox(), devices = {} } local args = args or {} local timeout = args.timeout or 2 local units = args.units or 1024 -- KB diff --git a/widget/pulseaudio.lua b/widget/pulseaudio.lua index b0946a1..ed37cb5 100644 --- a/widget/pulseaudio.lua +++ b/widget/pulseaudio.lua @@ -17,7 +17,7 @@ local string = { gmatch = string.gmatch, -- lain.widget.pulseaudio local function factory(args) - local pulseaudio = { widget = wibox.widget.textbox() } + local pulseaudio = { widget = wibox.widget.textbox() } local args = args or {} local timeout = args.timeout or 5 local settings = args.settings or function() end diff --git a/widget/pulsebar.lua b/widget/pulsebar.lua index e80a251..0ab6312 100644 --- a/widget/pulsebar.lua +++ b/widget/pulsebar.lua @@ -7,33 +7,32 @@ --]] -local helpers = require("lain.helpers") -local awful = require("awful") -local naughty = require("naughty") -local wibox = require("wibox") -local math = { modf = math.modf } -local string = { format = string.format, - gmatch = string.gmatch, - match = string.match, - rep = string.rep } -local type = type -local tonumber = tonumber -local setmetatable = setmetatable +local helpers = require("lain.helpers") +local awful = require("awful") +local naughty = require("naughty") +local wibox = require("wibox") +local math = { modf = math.modf } +local string = { format = string.format, + match = string.match, + gmatch = string.gmatch, + rep = string.rep } +local type, tonumber = type, tonumber -- Pulseaudio volume bar -- lain.widget.pulsebar -local pulsebar = { - colors = { - background = "#000000", - mute = "#EB8F8F", - unmute = "#A4CE8A" - }, - - _current_level = 0, - _muted = false -} local function factory(args) + local pulsebar = { + colors = { + background = "#000000", + mute = "#EB8F8F", + unmute = "#A4CE8A" + }, + + _current_level = 0, + _muted = false + } + local args = args or {} local timeout = args.timeout or 5 local settings = args.settings or function() end diff --git a/widget/sysload.lua b/widget/sysload.lua index d7422d8..d358687 100644 --- a/widget/sysload.lua +++ b/widget/sysload.lua @@ -7,29 +7,25 @@ --]] -local helpers = require("lain.helpers") -local wibox = require("wibox") -local io = { open = io.open } -local string = { match = string.match } -local setmetatable = setmetatable +local helpers = require("lain.helpers") +local wibox = require("wibox") +local open, match = io.open, string.match -- System load -- lain.widget.sysload -local sysload = {} local function factory(args) + local sysload = { widget = wibox.widget.textbox() } local args = args or {} local timeout = args.timeout or 2 local settings = args.settings or function() end - sysload.widget = wibox.widget.textbox() - function sysload.update() - local f = io.open("/proc/loadavg") + local f = open("/proc/loadavg") local ret = f:read("*all") f:close() - load_1, load_5, load_15 = string.match(ret, "([^%s]+) ([^%s]+) ([^%s]+)") + load_1, load_5, load_15 = match(ret, "([^%s]+) ([^%s]+) ([^%s]+)") widget = sysload.widget settings() @@ -40,4 +36,4 @@ local function factory(args) return sysload end -return setmetatable(sysload, { __call = function(_, ...) return factory(...) end }) +return factory diff --git a/widget/temp.lua b/widget/temp.lua index 8e3bc3c..efe2ab9 100644 --- a/widget/temp.lua +++ b/widget/temp.lua @@ -6,26 +6,23 @@ --]] -local helpers = require("lain.helpers") -local wibox = require("wibox") -local io = { open = io.open } -local tonumber = tonumber -local setmetatable = setmetatable +local helpers = require("lain.helpers") +local wibox = require("wibox") +local open = io.open +local tonumber = tonumber -- coretemp -- lain.widget.temp -local temp = {} local function factory(args) + local temp = { widget = wibox.widget.textbox() } local args = args or {} local timeout = args.timeout or 2 local tempfile = args.tempfile or "/sys/class/thermal/thermal_zone0/temp" local settings = args.settings or function() end - temp.widget = wibox.widget.textbox() - function temp.update() - local f = io.open(tempfile) + local f = open(tempfile) if f then coretemp_now = tonumber(f:read("*all")) / 1000 f:close() @@ -42,4 +39,4 @@ local function factory(args) return temp end -return setmetatable(temp, { __call = function(_, ...) return factory(...) end }) +return factory -- 2.39.2