widgets: no global tables, but one instance per call; closes #336; closes #337

This commit is contained in:
Luke Bonham 2017-04-02 19:35:03 +02:00
parent 2a5d13920f
commit 8f948b52eb
12 changed files with 110 additions and 136 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
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
fs.notification = naughty.notify({
preset = fs.notification_preset,
timeout = seconds or 5
})
end
local function factory(args)
local fs = { unit = { ["mb"] = 1024, ["gb"] = 1024^2 }, widget = wibox.widget.textbox() }
function fs.hide()
if not fs.notification then return end
naughty.destroy(fs.notification)
fs.notification = nil
end
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
fs.notification = naughty.notify({
preset = fs.notification_preset,
timeout = seconds or 5
})
end
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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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