diff --git a/extra/batacpi.lua b/extra/batacpi.lua deleted file mode 100644 index 94d0901..0000000 --- a/extra/batacpi.lua +++ /dev/null @@ -1,51 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2009, Adrian C. ---------------------------------------------------- - --- {{{ Grab environment -local tonumber = tonumber -local io = { popen = io.popen } -local setmetatable = setmetatable -local table = { insert = table.insert } -local string = { match = string.match } --- }}} - - --- Batacpi: provides state, charge, and remaining time for all batteries using acpitool -module("vicious.widgets.batacpi") - - --- {{{ Battery widget type -local function worker(format) - local battery_info = {} - local battery_state = { - ["full"] = "↯", - ["unknown"] = "⌁", - ["charged"] = "↯", - ["charging"] = "+", - ["discharging"] = "-" - } - - -- Get data from acpitool - local f = io.popen("acpitool -b") - - for line in f:lines() do - -- Check if the battery is present - if string.match(line, "^[%s]+Battery.*") then - -- Store state and charge information - table.insert(battery_info, (battery_state[string.match(line, "([%a]*),") or "unknown"])) - table.insert(battery_info, (tonumber(string.match(line, "([%d]?[%d]?[%d])%.")) or 0)) - -- Store remaining time information - table.insert(battery_info, (string.match(line, "%%,%s(.*)") or "N/A")) - else - return {battery_state["unknown"], 0, "N/A"} - end - end - f:close() - - return battery_info -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/batpmu.lua b/extra/batpmu.lua deleted file mode 100644 index 9cd1503..0000000 --- a/extra/batpmu.lua +++ /dev/null @@ -1,78 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2010, Adrian C. ---------------------------------------------------- - --- {{{ Grab environment -local tonumber = tonumber -local io = { open = io.open } -local setmetatable = setmetatable -local math = { - min = math.min, - floor = math.floor -} -local string = { - find = string.find, - match = string.match, - format = string.format -} --- }}} - - --- Batpmu: provides state, charge and remaining time for a requested battery using PMU -module("vicious.widgets.batpmu") - - --- {{{ Battery widget type -local function worker(format, batid) - local battery_state = { - ["full"] = "↯", - ["unknown"] = "⌁", - ["00000013"] = "+", - ["00000011"] = "-" - } - - -- Get /proc/pmu/battery* state - local f = io.open("/proc/pmu/" .. batid) - -- Handler for incompetent users - if not f then return {battery_state["unknown"], 0, "N/A"} end - local statefile = f:read("*all") - f:close() - - -- Get /proc/pmu/info data - local f = io.open("/proc/pmu/info") - local infofile = f:read("*all") - f:close() - - -- Check if the battery is present - if infofile == nil or string.find(infofile, "Battery count[%s]+:[%s]0") then - return {battery_state["unknown"], 0, "N/A"} - end - - - -- Get capacity and charge information - local capacity = string.match(statefile, "max_charge[%s]+:[%s]([%d]+).*") - local remaining = string.match(statefile, "charge[%s]+:[%s]([%d]+).*") - - -- Calculate percentage - local percent = math.min(math.floor(remaining / capacity * 100), 100) - - - -- Get timer information - local timer = string.match(statefile, "time rem%.[%s]+:[%s]([%d]+).*") - if timer == "0" then return {battery_state["full"], percent, "N/A"} end - - -- Get state information - local state = string.match(statefile, "flags[%s]+:[%s]([%d]+).*") - local state = battery_state[state] or battery_state["unknown"] - - -- Calculate remaining (charging or discharging) time - local hoursleft = math.floor(tonumber(timer) / 3600) - local minutesleft = math.floor((tonumber(timer) / 60) % 60) - local time = string.format("%02d:%02d", hoursleft, minutesleft) - - return {state, percent, time} -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/batproc.lua b/extra/batproc.lua deleted file mode 100644 index 2316f03..0000000 --- a/extra/batproc.lua +++ /dev/null @@ -1,85 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2009, Adrian C. ---------------------------------------------------- - --- {{{ Grab environment -local tonumber = tonumber -local io = { open = io.open } -local setmetatable = setmetatable -local math = { - min = math.min, - floor = math.floor -} -local string = { - find = string.find, - match = string.match, - format = string.format -} --- }}} - - --- Batproc: provides state, charge, and remaining time for a requested battery using procfs -module("vicious.widgets.batproc") - - --- {{{ Battery widget type -local function worker(format, batid) - local battery_state = { - ["full"] = "↯", - ["unknown"] = "⌁", - ["charged"] = "↯", - ["charging"] = "+", - ["discharging"] = "-" - } - - -- Get /proc/acpi/battery info - local f = io.open("/proc/acpi/battery/"..batid.."/info") - -- Handler for incompetent users - if not f then return {battery_state["unknown"], 0, "N/A"} end - local infofile = f:read("*all") - f:close() - - -- Check if the battery is present - if infofile == nil or string.find(infofile, "present:[%s]+no") then - return {battery_state["unknown"], 0, "N/A"} - end - - -- Get capacity information - local capacity = string.match(infofile, "last full capacity:[%s]+([%d]+).*") - - - -- Get /proc/acpi/battery state - local f = io.open("/proc/acpi/battery/"..batid.."/state") - local statefile = f:read("*all") - f:close() - - -- Get state information - local state = string.match(statefile, "charging state:[%s]+([%a]+).*") - local state = battery_state[state] or battery_state["unknown"] - - -- Get charge information - local rate = string.match(statefile, "present rate:[%s]+([%d]+).*") - local remaining = string.match(statefile, "remaining capacity:[%s]+([%d]+).*") - - - -- Calculate percentage (but work around broken BAT/ACPI implementations) - local percent = math.min(math.floor(remaining / capacity * 100), 100) - - -- Calculate remaining (charging or discharging) time - if state == "+" then - timeleft = (tonumber(capacity) - tonumber(remaining)) / tonumber(rate) - elseif state == "-" then - timeleft = tonumber(remaining) / tonumber(rate) - else - return {state, percent, "N/A"} - end - local hoursleft = math.floor(timeleft) - local minutesleft = math.floor((timeleft - hoursleft) * 60 ) - local time = string.format("%02d:%02d", hoursleft, minutesleft) - - return {state, percent, time} -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/mpc.lua b/extra/mpc.lua deleted file mode 100644 index fec402e..0000000 --- a/extra/mpc.lua +++ /dev/null @@ -1,47 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2010, Adrian C. --- * (c) 2009, Lucas de Vries ---------------------------------------------------- - --- {{{ Grab environment -local type = type -local io = { popen = io.popen } -local setmetatable = setmetatable -local string = { find = string.find } -local helpers = require("vicious.helpers") --- }}} - - --- Mpc: provides the currently playing song in MPD -module("vicious.widgets.mpc") - - --- {{{ MPC widget type -local function worker(format, warg) - -- Get data from mpd - local f = io.popen("mpc") - local np = f:read("*line") - f:close() - - -- Not installed, - if np == nil or -- off or stoppped. - (string.find(np, "MPD_HOST") or string.find(np, "volume:")) - then - return {"Stopped"} - end - - -- Check if we should scroll, or maybe truncate - if warg then - if type(warg) == "table" then - np = helpers.scroll(np, warg[1], warg[2]) - else - np = helpers.truncate(np, warg) - end - end - - return {helpers.escape(np)} -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/net.lua b/extra/net.lua deleted file mode 100644 index 13ebd82..0000000 --- a/extra/net.lua +++ /dev/null @@ -1,138 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2010, Adrian C. --- * (c) 2009, Henning Glawe --- * (c) 2009, Lucas de Vries ---------------------------------------------------- - --- {{{ Grab environment -local pairs = pairs -local tonumber = tonumber -local os = { time = os.time } -local io = { lines = io.lines } -local setmetatable = setmetatable -local string = { match = string.match } -local helpers = require("vicious.helpers") --- }}} - - --- Net: provides usage statistics for all network interfaces -module("vicious.widgets.net") - - --- Initialise function tables -local nets = {} --- Variable definitions -local unit = { ["b"] = 1, ["kb"] = 1024, - ["mb"] = 1024^2, ["gb"] = 1024^3 -} - --- {{{ Net widget type -local function worker(format, tignorelist) - local args = {} - local tignore = {} - local total_rx = 0 - local total_tx = 0 - local any_up = 0 - - if not tignorelist then - tignorelist = {"lo", "wmaster0"} - end - for k, i in pairs(tignorelist) do - tignore[i] = true - end - - -- Get NET stats - for line in io.lines("/proc/net/dev") do - -- Match wmaster0 as well as rt0 (multiple leading spaces) - local name = string.match(line, "^[%s]?[%s]?[%s]?[%s]?([%w]+):") - if name ~= nil then - -- Received bytes, first value after the name - local recv = tonumber(string.match(line, ":[%s]*([%d]+)")) - -- Transmited bytes, 7 fields from end of the line - local send = tonumber(string.match(line, - "([%d]+)%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d$")) - - if not tignore[name] then - total_rx = total_rx + recv - total_tx = total_tx + send - end - - helpers.uformat(args, name .. " rx", recv, unit) - helpers.uformat(args, name .. " tx", send, unit) - - if nets[name] == nil then - -- Default values on the first run - nets[name] = {} - - helpers.uformat(args, name .. " down", 0, unit) - helpers.uformat(args, name .. " up", 0, unit) - args["{"..name.." carrier}"] = 0 - - nets[name].time = os.time() - else -- Net stats are absolute, substract our last reading - local interval = os.time() - nets[name].time > 0 and - os.time() - nets[name].time or 1 - nets[name].time = os.time() - - local down = (recv - nets[name][1]) / interval - local up = (send - nets[name][2]) / interval - - helpers.uformat(args, name .. " down", down, unit) - helpers.uformat(args, name .. " up", up, unit) - - -- Carrier detection - sysnet = helpers.pathtotable("/sys/class/net/" .. name) - - if sysnet.carrier then - ccarrier = tonumber(sysnet.carrier) - - args["{"..name.." carrier}"] = ccarrier - if ccarrier ~= 0 and not tignore[name] then - any_up = 1 - end - else - args["{"..name.." carrier}"] = 0 - end - end - - -- Store totals - nets[name][1] = recv - nets[name][2] = send - end - end - - helpers.uformat(args, "total rx", total_rx, unit) - helpers.uformat(args, "total tx", total_tx, unit) - - if nets["total"] == nil then - -- Default values on the first run - nets["total"] = {} - - helpers.uformat(args, "total down", 0, unit) - helpers.uformat(args, "total up", 0, unit) - args["{total carrier}"] = 0 - - nets["total"].time = os.time() - else -- Net stats are absolute, substract our last reading - local interval = os.time() - nets["total"].time > 0 and - os.time() - nets["total"].time or 1 - nets["total"].time = os.time() - - local down = (total_rx - nets["total"][1]) / interval - local up = (total_tx - nets["total"][2]) / interval - - helpers.uformat(args, "total down", down, unit) - helpers.uformat(args, "total up", up, unit) - args["{total carrier}"] = any_up - end - - -- Store totals - nets["total"][1] = total_rx - nets["total"][2] = total_tx - - return args -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/netcfg.lua b/extra/netcfg.lua deleted file mode 100644 index 6d859fe..0000000 --- a/extra/netcfg.lua +++ /dev/null @@ -1,34 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2010, Radu A. ---------------------------------------------------- - --- {{{ Grab environment -local io = { popen = io.popen } -local setmetatable = setmetatable -local table = { insert = table.insert } --- }}} - - --- Netcfg: provides active netcfg network profiles -module("vicious.widgets.netcfg") - - --- {{{ Netcfg widget type -local function worker(format) - -- Initialize counters - local profiles = {} - - local f = io.popen("ls -1 /var/run/network/profiles") - for line in f:lines() do - if line ~= nil then - table.insert(profiles, line) - end - end - f:close() - - return profiles -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/ossvol.lua b/extra/ossvol.lua deleted file mode 100644 index 35f3621..0000000 --- a/extra/ossvol.lua +++ /dev/null @@ -1,53 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2010, Adrian C. ---------------------------------------------------- - --- {{{ Grab environment -local tonumber = tonumber -local io = { popen = io.popen } -local setmetatable = setmetatable -local string = { match = string.match } --- }}} - - --- Ossvol: provides volume levels of requested OSS mixers -module("vicious.widgets.ossvol") - - --- {{{ Volume widget type -local function worker(format, warg) - if not warg then return end - - local mixer_state = { - ["on"] = "♫", -- "", - ["off"] = "♩" -- "M" - } - - -- Get mixer control contents - local f = io.popen("ossmix -c") - local mixer = f:read("*all") - f:close() - - -- Capture mixer control state - local volu = tonumber(string.match(mixer, warg .. "[%s]([%d%.]+)"))/0.25 - local mute = string.match(mixer, "vol%.mute[%s]([%a]+)") - -- Handle mixers without data - if volu == nil then - return {0, mixer_state["off"]} - end - - -- Handle mixers without mute - if mute == "OFF" and volu == "0" - -- Handle mixers that are muted - or mute == "ON" then - mute = mixer_state["off"] - else - mute = mixer_state["on"] - end - - return {volu, mute} -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/rss.lua b/extra/rss.lua deleted file mode 100644 index cd7b5c3..0000000 --- a/extra/rss.lua +++ /dev/null @@ -1,67 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2009, olcc --- --- This is now a standalone RSS reader for awesome: --- * http://github.com/olcc/aware ---------------------------------------------------- - --- {{{ Grab environment -local pairs = pairs -local io = { popen = io.popen } -local setmetatable = setmetatable --- }}} - - --- RSS: provides latest world news -module("vicious.widgets.rss") - - --- {{{ RSS widget type -local function worker(format, input) - -- input: * feed - feed url - -- * object - entity to look for (typically: 'item') - -- * fields - fields to read (example: 'link', 'title', 'description') - -- output: * count - number of entities found - -- * one table for each field, containing wanted values - local feed = input.feed - local object = input.object - local fields = input.fields - - -- Initialise tables - local out = {} - - for _, v in pairs(fields) do - out[v] = {} - end - - -- Initialise variables - local ob = nil - local i,j,k = 1, 1, 0 - local curl = "curl -A 'Mozilla/4.0' -fsm 5 --connect-timeout 3 " - - -- Get the feed - local f = io.popen(curl .. '"' .. feed .. '"') - local feed = f:read("*all") - f:close() - - while true do - i, j, ob = feed.find(feed, "<" .. object .. ">(.-)", i) - if not ob then break end - - for _, v in pairs(fields) do - out[v][k] = ob:match("<" .. v .. ">(.*)") - end - - k = k+1 - i = j+1 - end - - -- Update the entity count - out.count = k - - return out -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/sensors.lua b/extra/sensors.lua deleted file mode 100644 index 53c419e..0000000 --- a/extra/sensors.lua +++ /dev/null @@ -1,68 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2010, Greg D. ---------------------------------------------------- - --- {{{ Grab environment -local tonumber = tonumber -local io = { popen = io.popen } -local setmetatable = setmetatable -local table = { insert = table.insert } -local string = { - gsub = string.gsub, - match = string.match -} --- }}} - - --- Sensors: provides access to lm_sensors data -module("vicious.widgets.sensors") - - --- {{{ Split helper function -local function datasplit(str) - -- Splitting strings into associative array - -- with some magic to get the values right. - str = string.gsub(str, "\n", ":") - - local tbl = {} - string.gsub(str, "([^:]*)", function (v) - if string.match(v, ".") then - table.insert(tbl, v) - end - end) - - local assoc = {} - for c = 1, #tbl, 2 do - local k = string.gsub(tbl[c], ".*_", "") - local v = tonumber(string.match(tbl[c+1], "[%d]+")) - assoc[k] = v - end - - return assoc -end --- }}} - --- {{{ Sensors widget type -local function worker(format, warg) - -- Get data from all sensors - local f = io.popen("LANG=C sensors -uA") - local lm_sensors = f:read("*all") - f:close() - - local sensor_data = string.gsub( - string.match(lm_sensors, warg..":\n(%s%s.-)\n[^ ]"), " ", "") - - -- One of: crit, max - local divisor = "crit" - local s_data = datasplit(sensor_data) - - if s_data[divisor] and s_data[divisor] > 0 then - s_data.percent = s_data.input / s_data[divisor] * 100 - end - - return {s_data.input, tonumber(s_data.percent)} -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) diff --git a/extra/sumup.lua b/extra/sumup.lua deleted file mode 100644 index 609b25c..0000000 --- a/extra/sumup.lua +++ /dev/null @@ -1,51 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 ---------------------------------------------------- --- * (c) 2010, Jörg. T - --- {{{ Grab environment -local io = { popen = io.popen } -local setmetatable = setmetatable -local pairs = pairs --- }}} - --- Sum up: provides a number of files in several directories --- @warg.paths a hash table with the paths which should be checked --- EXAMPLE: paths = { music = "/home/user/music" } --- @warg.pattern a global regex to match files (Default: match all) --- use posix-egrep style instead of the default (less familar) emacs regex - --- Be carefull with directories, who contains a mass of files. --- "find" is usally fast, but will also produce delays, if a big number of inodes are checked. --- So if you want to count your big music library, you may want to use locate/updatedb instead. -module("vicious.widgets.sumup") - - --- {{{ Sum up widget type -local function worker(format, warg) - if not warg then return end - -- Initialise counter table - local store = {} - - -- Match by default all files - warg.pattern = warg.pattern or ".*" - - for key, value in pairs(warg.paths) do - local f = io.popen("find '"..value.."'".. - " -type f -regextype posix-egrep".. - " -regex '"..warg.pattern.."'") - - local lines = 0 - for line in f:lines() do - lines = lines + 1 - end - - store[key] = lines - - f:close() - end - return store -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end })